Entity framework core 使用EntityFrameworkCore 3.1.2 ModelBuilder设定嵌套数据种子
我有一个现有数据库,我们正在升级并迁移到新的Entity framework core 使用EntityFrameworkCore 3.1.2 ModelBuilder设定嵌套数据种子,entity-framework-core,entity-framework-core-3.1,Entity Framework Core,Entity Framework Core 3.1,我有一个现有数据库,我们正在升级并迁移到新的EntityFrameworkCore 3.1.2解决方案 现有的数据库设计得很糟糕,但是有一个很大的数据集需要移植到新模型 我目前使用的模型如下(为简洁起见,将其简化) 我有以下.HasData,它是在OnModelCreating方法中播种的 modelBuilder.Entity<Company>(e => { e.HasData(new { Id = company.ID });
EntityFrameworkCore 3.1.2
解决方案
现有的数据库设计得很糟糕,但是有一个很大的数据集需要移植到新模型
我目前使用的模型如下(为简洁起见,将其简化)
我有以下.HasData
,它是在OnModelCreating
方法中播种的
modelBuilder.Entity<Company>(e =>
{
e.HasData(new
{
Id = company.ID
});
e.OwnsOne(a => a.Address).HasData(new
{
CompanyId = company.ID,
Address1 = company.Address
});
e.OwnsMany(c => c.Contacts).HasData(new
{
CompanyId = company.ID
//How to add in the address data here?
});
});
但是,这会引发以下错误
System.InvalidOperationException:无法将类型“Address”标记为owned,因为已存在同名的非owned实体类型
要确认的信息将生成公司.Contact.Address
实体是否存在。因此,我假设这是因为我的外键是以另一种方式运行的(即Company.AddressId
而不是Address.CompanyId
)
是否确认以下内容
地址
引用到公司
李>
公司.联系人.地址
添加到添加到列表中的第一个联系人Company
Company.Address
Company.Contact - singular
Company.Contact.Address
modelBuilder.Entity<Company>(e =>
{
e.HasData(new
{
Id = company.ID
});
e.OwnsOne(a => a.Address).HasData(new
{
CompanyId = company.ID,
Address1 = company.Address
});
e.OwnsMany(c => c.Contacts).HasData(new
{
CompanyId = company.ID
//How to add in the address data here?
});
});
e.OwnsMany(c => c.Contacts).HasData(new
{
CompanyId = company.ID ,
Address = new Address
{
Address1 = company.DirectorAddress,
}
});