如何处理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, })