SQL Server Compact Edition - 序列列?

时间:2011-08-21 12:01:13

标签: sql-server-ce

我有一个使用SQL Server Compact的简单桌面应用程序(3.5并且即将升级到4.0)。

在我的主客户表中,除了ID列 - 这是PK并自动递增之外,我需要保留一个Number列,该列以某个数字(20000)开头并且是唯一的。

现有最高行计算下一个数字的选项不是很好 - 如果其他客户在我的第一个选择与我的插入之间添加客户 - 我会遇到问题。

正如many places中所指出的,SqlCE自动增量列应为Identity列,并且每个表中只能有一个Identity列。

您是否还有其他练习可以解决此问题?

BTW - 我正在使用Linq来ADO .net。

修改

刚刚找到这个链接,发现我甚至可以使用linq到Identity实体框架的Identity选项: http://erikej.blogspot.com/2010/04/solutions-to-server-generated-keys-and.html

1 个答案:

答案 0 :(得分: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();
}