2

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

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

我已经看到了 StoreGeneratedPattern,但不确定如果没有数据库中的身份,这将如何工作。手动方法是使用 MAX(id)+1 手动填充 POCO,但这感觉像是一种 hack,我担心它会在多线程环境中引入问题,在这种环境中,多个请求可能会在我的表中插入记录同时。

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

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

4

1 回答 1

0

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

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

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

仅供参考:实体框架StoreGeneratedPattern(或DatabaseGeneratedOption)仅指定如何在插入和更新时处理值。UsingIdentity告诉 EF 该值预计将由数据库在插入时生成。Computed意味着它是在插入和更新时生成的。

于 2013-03-26T16:48:22.680 回答