SQL Server Compact Edition - 序列列?
Posted
技术标签:
【中文标题】SQL Server Compact Edition - 序列列?【英文标题】:SQL Server Compact Edition - sequence column? 【发布时间】:2011-08-21 12:01:13 【问题描述】:我有一个使用 SQL Server Compact(3.5 并且即将升级到 4.0)的简单桌面应用程序。
在我的主要客户表中,除了 ID
列 - 这是 PK 并且会自动递增,我需要保存一个以某个数字 (20000) 开头并且是唯一的 Number
列。
通过现有最高行计算下一个数字的选项不是一个好的选项 - 如果其他客户在我的第一个选择和我的插入之间添加一个客户 - 我会遇到问题。
正如manyplaces 中所指出的,SqlCE 自动递增的列应该是Identity
列,并且每个表中只能有一个Identity
列。
你知道解决这个问题的其他做法吗?
顺便说一句 - 我正在使用 Linq to ADO .net。
编辑:
刚刚找到此链接,发现我什至可以将 Identity 选项与 linq to Entities 框架一起使用: http://erikej.blogspot.com/2010/04/solutions-to-server-generated-keys-and.html
【问题讨论】:
【参考方案1】:这个动作基本上是错误的 但如果你坚持 当您选择列的最大值时,您需要一个事务。因此,您可以确保其他用户在此操作完成之前无法更新(和更改最大值)。
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();
【讨论】:
以上是关于SQL Server Compact Edition - 序列列?的主要内容,如果未能解决你的问题,请参考以下文章
从 SQL Server Compact 4.0 迁移到 SQL Server Express 后提供程序错误
SQL Server 可以复制到 SQL Server Compact Edition 吗?
SQL Server Express 和 SQL Server Compact Edition
从使用 SQL Server Express 切换到 SQL Server Compact
SQL Server Compact Edition 和 SQL Server 2008 Management Studio