2011-08-21 144 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(); 
} 
相关问题