如何处理entity framework中的主键5代码优先
在我的EF5代码优先模型中,如果数据库设置主键,则创建新记录会更好。 我使用Guid作为主键,如果设置了DatabaseGeneratedOption.Identity
,SQL Server将始终创建uniqueidentifier
。
但是,当我尝试初始化数据库时,这会导致问题。 如果我在种子方法中设置Guid,SQL Server会覆盖它。 如果我没有设置Guid,我每次都会得到一条新记录。 使用预先设置的Guids为数据库设定种子并为我的正常操作设置DatabaseGeneratedOption.Identity
的建议解决方案是什么?
示例类模型:
[Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid Id { get; set; } public RecordName { get; set; } public DateTime? Created { get; set; } public DateTime? Updated { get; set; }
示例种子方法:
var record = new Record() { Id = new Guid("3B80725E-9550-4933-807F-C2FAA0942225"), RecordName = "New Record", Created = DateTime.UtcNow, Updated = DateTime.UtcNow, }; context.Record.AddOrUpdate(record); context.SaveChanges();
AddOrUpdate具有允许您指定密钥的重载
来自MSDN
所以你需要为方法提供自然键:
context.Record.AddOrUpdate(c => c.RecordName, new Record() { RecordName = "New Record", Created = DateTime.UtcNow, Updated = DateTime.UtcNow, })