2011-03-31 17 views
1

我正在調試的應用程序中的一項功能允許用戶爲產品創建評論。輸入表單有一個ReviewId字段,根據現有評論的數量自動填充 - 它按順序增加'1'。對於現有的產品,這工作正常。問題自動爲新項目分配連續值

對於新產品,以前沒有評論,所以當用戶嘗試創建一個時,應用程序會拋出一個域服務異常。我知道這是因爲有一些代碼正在尋找最後的審查ID,但由於它是一個新產品,沒有一個代碼會導致錯誤。我只是無法弄清楚修復它的代碼(PHP程序員在C#/ Silverlight中工作)。我沒有修改數據庫的權限,所以我試圖以編程方式執行此操作。

以下是我有:

AddReviewChildWindow.cs -

公共無效GetNewReviewNumber()
{
ReviewsDomainContext複習=新ReviewsDomainContext();

InvokeOperation count = review.GetLastReviewNumber(ProductId);

count.Completed + = new System.EventHandler(GetNewReviewNumberCompleted);
}

而DomainServices.cs -

[說明( 「返回與產品相關聯的最後一次審查的ID號」)
[調用]

公衆System.Int32 GetLastReviewNumber(可爲空的productId)
{

INT retVal的= 0;

//獲得產品評論列表。
IQueryable reviews = GetProductReviews(productId);

//獲取最後一個。
評論複習= reviews.Last();

//指定一個新的。
retVal = review.ReviewNumber;
retVal ++; //添加一個。

return retVal;
}

這應該是一個容易的人誰知道C#,我想 - 但我無法找到它。謝謝!

+0

蟎題外話,但ReviewId表單字段新的評論是不健全的設計。想象一下,用戶A打開表單並獲得ReviewId = 2,然後用戶B打開表單並獲取ReviewId = 2,然後他們都提交...您應該在插入評論之前立即生成ID。 – Misko 2011-03-31 17:27:38

回答

1

如果我正確理解您的需求,這應該工作:

public Int32 GetLastReviewNumber(Nullable productId) 
{ 
    int retVal = 0; 

    //Get the list of reviews for product. 
    IQueryable<Review> reviews = GetProductReviews(productId); 

    //Get the last one. 
    if(reviews.Count() != 0) 
    { 
     Review review = reviews.Last(); 

     //Assign new one. 
     retVal = review.ReviewNumber; 
    } 
    retVal++;//add one to it. 

    return retVal;  
} 
+0

這樣做了。我覺得這很簡單。謝謝!! – 2011-03-31 16:50:05

+0

很高興爲您提供幫助。乾杯! – Sorax 2011-03-31 16:53:06