应用程序框架: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
命令时出现以下错误
无法添加实体类型“雇员”的种子实体,因为没有为必需的属性“键”提供值。
我不想发送Key
的值。我希望它可以在SQL Server数据库中自动生成。
我的基本要求是:每当我在包管理器控制台中运行update-database
时,都插入主数据(已更新)。
答案 0 :(得分:1)
尝试将以下属性添加到 Key
属性:。
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
这将指示数据库在未指定 Key
的情况下自动生成context.Database.Migrate()
Apparently,即使对于为迁移中的种子数据自动生成的ID,也必须始终为其指定ID,因为如果给定条目已存在于数据库中,则该ID将用于匹配。
但是,一种解决方案是在初始化数据库后(例如,在调用select t.*
from (select distinct table.users from table) t
where not exists
(
select to_char(u.transaction_date, 'YYYY-MM') as month
from table u
where u.users = t.users
group by month
having sum(u.amount) <= 10
)
之后)在数据库中手动插入所需的记录。当然,这里您必须手动检查给定记录是否还没有。