У меня есть существующая база данных, которую мы обновляем и переносим на новое решение 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
).
Будет ли это подтверждением следующего:
- Как я могу ссылаться на
Address
на Company
без указания c Id? - Как добавить
Company.Contact.Address
к 1-му контакту, добавленному в список?