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

mar*_*are 5 .net sql-server entity-framework .net-4.0

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

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

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

Ada*_*son 12

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

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