代码之家  ›  专栏  ›  技术社区  ›  kudlatiger

在启用自动生成主键的情况下,如何在DbContext的“OnModelCreating”方法中为主数据播种?

  •  0
  • kudlatiger  · 技术社区  · 5 年前

    应用框架: ASPNET Core 2.1

    public class Employee
    {
        [DataMember(Name = "key")]
        [Key]
        public Guid Key { get; set; }
        [Required]
        [DataMember(Name = "Name")]
        public string Name { get; set; }
    }
    

    Guid

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //Auto generation of Guid
            modelBuilder.Entity<Employee>().Property(x => x.Key).HasDefaultValueSql("NEWID()");
    
            //seeding of data
            modelBuilder.Entity<Employee>().HasData(
                new Employee{ Name = "Hamlet" },
                new Employee{ Name = "King Lear" },
                new Employee{ Name = "Othello" }
            );
        }
    

    在运行 add-migration InitialCreate 命令

    无法添加实体类型“Employee”的种子实体,因为没有为所需属性“Key”提供值。

    Key

    update-database

    1 回复  |  直到 5 年前
        1
  •  1
  •   Martin Zikmund    5 年前

    尝试将以下属性添加到 Key

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    

    这将指示数据库自动生成 钥匙 未指定时

    Apparently 您必须始终指定ID,即使是为迁移中的种子数据自动生成的ID,因为如果给定的条目已经存在于数据库中,则使用该ID进行匹配。

    但是,一种解决方案是在数据库初始化后(调用 context.Database.Migrate()