使用带有Entity框架的uniqueidentifier SQL列类型

.net .net-4.0 entity-framework sql-server

对于我在Clients表中的主键和标识,我使用uniqueidentifier列,其默认值设置为newsequentialid()。通过管理工具插入新行可以创建ID的值。

通过EF从.NET 4代码插入导致插入零GUID(00000-0000 ....)。我用new创建实体,设置一些值并执行EF AddToClients (例如)。如果已调试,则id属性的值显示为零GUID。我不明确设置通过标识Guid.NewGuid()因为我要离开它关闭了在我的代码newsequentialid()在SQL Server中。问题是,它不起作用。第一次执行代码时,行插入的GUID为零。下次它明显失败并导致主键违规异常。

如何在不必在客户端代码中设置GUID的情况下使其工作?

一般承认的答案

您需要更改EF设计器中属性的StoreGeneratedPattern值。将其设置为Identity 。这将导致EF避免在插入上设置值,然后在插入完成后捕获它。

请注意,如果您使用的是EF 4,则仅使用设计器可能会遇到此问题(请参阅此链接 )。您可能需要手动编辑.edmx并在存储模型中设置StoreGeneratedPattern


热门答案

右键单击你.edmx。使用带有编码的XML文本编辑器打开。找到id名称并在其旁边添加相同标签中的属性:StoreGeneratedPattern =“Identity”。

例:

<Property Name =“WorkerId”Type =“uniqueidentifier”Nullable =“false”StoreGeneratedPattern =“Identity”/>




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因