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

使用 SQL Server Compact 与专用 SQL Server 数据库的缺点