Заполнение вложенных данных с помощью EntityFrameworkCore 3.1.2 ModelBuilder - PullRequest
0 голосов
/ 26 марта 2020

У меня есть существующая база данных, которую мы обновляем и переносим на новое решение EntityFrameworkCore 3.1.2.

Существующая база данных довольно плохо спроектирована, но имеет большой набор данных, который мне нужно перенести на новую модель ,

Текущая модель, которую я имею, выглядит следующим образом (для краткости сокращена):

public class Company 
{
    /*reduced for brevity*/

    public int AddressId { get; set; }
    public Address Address { get; set; }

    public IList<Contact> Contacts { get; set; }
}

public class Address 
{
    /*redcued for brevity*/

    public IList<Contact> Contacts { get; set; }  
}

public class Contact 
{
    /*reduced for brevity*/ 

    public int? AddressId { get; set; }
    public Address Address { get; set; }
}

Текущий набор данных содержит достаточно информации для настройки следующего (в настоящее время считывается из файла CSV);

Company
Company.Address
Company.Contact - singular
Company.Contact.Address

У меня есть следующий .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?
    });    
 }); 

Я попытался добавить следующее;

e.OwnsMany(c => c.Contacts).HasData(new
{
     CompanyId = company.ID         ,
     Address = new Address
     {
         Address1 = company.DirectorAddress,
     }
}); 

Однако при этом выдается следующая ошибка:

System.InvalidOperationException: тип «Адрес» не может быть помечен как принадлежащий, поскольку не принадлежащий ему тип сущности с тем же именем уже существует.

Который для подтверждения генерируется независимо от того, присутствует объект Company.Contact.Address или нет. Поэтому я предполагаю, что это связано с тем фактом, что мой внешний ключ вызывается другим способом (т. Е. Company.AddressId, а не Address.CompanyId).

Будет ли это подтверждением следующего:

  1. Как я могу ссылаться на Address на Company без указания c Id?
  2. Как добавить Company.Contact.Address к 1-му контакту, добавленному в список?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...