c# - 如何在 Entity Framework 5 Code First 中处理主键

标签 c# sql entity-framework entity-framework-5

在我的 EF5 代码优先模型中,如果数据库设置了主键,新记录的创建效果会更好。我将 Guid 用作主键,如果设置了 DatabaseGeneratedOption.Identity,SQL Server 将始终创建 uniqueidentifier

但是,当我尝试最初为数据库设定种子时,这会导致问题。如果我在我的种子方法中设置 Guid,SQL Server 会覆盖它。如果我不设置 Guid,我每次都会获得一条新记录。使用预设 Guid 为数据库播种并保持 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,
             })

关于c# - 如何在 Entity Framework 5 Code First 中处理主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17712416/

相关文章:

c# - HasRequired 和 WithOptional 不生成一对一关系

entity-framework - 将表列映射到枚举并将查找表映射到枚举

c# - 以类型安全的方式使用另一个实例的属性子集创建一个实例?

C# MVC2 : How to get the selected value of a dropdownlist

c# - 有什么方法可以检查哪个 IDE 用于创建 .Net 项目

sql - PostgreSQL 聚合或窗口函数只返回最后一个值

mysql - 查询一半值

c# - 如何使用商店证书为 NET Core 2.1 正确设置 HTTPS

mysql - 从数据库中选择前10行并随机显示结果

c# - 为什么 DbMigration 类中的 Up() 方法是抽象方法,而 Down() 方法是虚拟方法