![](/img/trans.png)
[英]How can I seed data in the OnModelCreating method when there's a reference to another entity and none of them have any data?
[英]How do I seed the master data during "OnModelCreating" method of DbContext in case of auto generated primary key enabled?
应用程序框架: ASPNET Core 2.1
这是我的 class
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
命令时出现以下错误
无法添加实体类型“员工”的种子实体,因为没有为所需的属性“键”提供值。
我不想发送Key
的值。 我希望它在 SQL 服务器数据库中自动生成。
我的基本要求是:每当我在 package 管理器控制台中运行update-database
时插入主数据(更新)。
尝试将以下属性添加到Key
属性:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
如果未指定,则将指示数据库自动生成Key
显然 ,即使对于为迁移中的种子数据自动生成的ID,也必须始终指定ID,因为如果给定条目已存在于数据库中,则该ID将用于匹配。
但是,一种解决方案是在初始化数据库后(例如,在调用context.Database.Migrate()
之后context.Database.Migrate()
将所需的记录手动插入数据库中。 当然,在这里您必须手动检查给定记录是否还不存在。
尝试在播种期间手动添加标识值:
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{ Key = Guid.NewGuid(), Name = "Hamlet" },
new Employee{ Key = Guid.NewGuid(), Name = "King Lear" },
new Employee{ Key = Guid.NewGuid(), Name = "Othello" }
);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.