我有一个使用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
答案 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();
}