2011-08-21 142 views
0

我有一個簡單的桌面應用程序正在使用SQL Server Compact(3.5和即將升級到4.0)。SQL Server Compact Edition - 序列列?

在我的主要客戶表中,除了ID列 - 這是PK並且自動遞增的,我需要保留一個Number列,其中某個數字(20000)開頭並且是唯一的。

通過現有的最高行計算下一個數字的選項不是一個好的選擇 - 如果其他客戶端在我的第一個選擇和我的插入之間添加一個客戶 - 我會遇到問題。

正如manyplaces指出,SQLCE自動遞增列應該是Identity列,並在每個表可能是唯一一個Identity列。

有沒有其他的做法,你知道解決這個問題?

順便說一句 - 我正在使用Linq到ADO.net。

編輯:

剛剛發現這個鏈接,發現我可以使用,甚至身份的選擇與LINQ到實體框架: http://erikej.blogspot.com/2010/04/solutions-to-server-generated-keys-and.html

回答

0

這個動作是錯誤的基本上 但如果你堅持認爲 當您選擇列的最大值時,您需要一個事務。因此,您確保另一個用戶無法更新(並更改最大值),直到此操作完成。

using (TransactionScope transaction = new TransactionScope()) 
{   
    // Set new NumericColumn 
    entity.NumericColumn = (db.Context.Rotations.Max(r => (long?)r.NumericColumn) ?? 20000) + 1; 
    // Insert entity 
    db.Context.Rotations.AddObject(entity); 
    db.Context.SaveChanges(); 

    transaction.Complete(); 
} 
相關問題