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

是否确认以下内容

  • 如何在没有特定Id的情况下将
    地址
    引用到
    公司
  • 如何将
    公司.联系人.地址
    添加到添加到列表中的第一个联系人
  • 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,
         }
    });