在数据库中没有标识列的实体框架5中自动增量

时间:2013-03-26 10:17:51

标签: sql-server entity-framework

我无法为我的问题找到任何合适的解决方案,所以这是我的问题:

在Entity Framework(5.0)中,当在实际数据库(SQL Server 2005)中没有定义标识列时,如何设置要自动重写的ID列(PK)?

我已经看过StoreGeneratedPattern,但不确定如果没有db中的标识,这将如何工作。手动方法是手动填充MAX(id)+1的POCO,但这感觉就像一个黑客,我担心它会在多线程环境中引入问题,多个请求可能会在我的表中插入记录“相同”的时间。

请注意,我无法更改数据库中的表模式。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果你的应用程序的一个实例是唯一在这个表中插入行的东西,那么MAX(Id) + 1 hack可能就足够了。否则,您需要更改数据库模式以在插入时生成这些值 - 通过使用IDENTITY或使用触发器,sprocs等重新发明轮子。

无论您的解决方案是什么,它都应该保证永远不会生成重复的密钥 - 即使事务恰好回滚了一个或多个插入。

如果没有其他内容插入到表中,您应该能够在不破坏兼容性的情况下将Id更改为标识列。

仅供参考:实体框架的StoreGeneratedPattern(或DatabaseGeneratedOption)仅指定在插入和更新时如何处理值。使用Identity告诉EF,该值应该由插入时的数据库生成。 Computed表示它是在插入和更新时生成的。