В объекте Company
я включил Address
в качестве ссылки принадлежащий тип (так что таблица Company
включает свойства адреса в виде столбцов). Ссылка, принадлежащая Address
, включает Country
, удерживая внешний ключ CountryCode
, который является свойством класса Address
. Поэтому мне нужно настроить это свойство как внешний ключ.
Когда я использую атрибут ForeignKey("Country")
миграция прошла успешно, и таблица создается с правильным столбцом FK: [Companies].[Address_CountryCode]
. Однако я хочу использовать Fluent API для всех моих конфигураций EF Core DbContext. И это терпит неудачу, поскольку миграция обнаруживает конфликт владения Address
.
class Company
{
public int Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string City { get; set; }
public string Street { get; set; }
public string CountryCode { get; set; }
public Country Country { get; set; }
}
modelBuilder.Entity<Company>().OwnsOne<Address>(c => c.Address);
modelBuilder.Entity<Address>().HasOne<Country>(c => c.Country).WithMany().HasForeignKey(a => a.CountryCode);
Настройка внешнего ключа через Fluent API в этом случае завершается неудачно со следующим сообщением: The type 'Address' cannot be configured as non-owned because an owned entity type with the same name already exists.
. Опять же, с атрибутом ForeignKey
он работает, как и ожидалось.
Как правильно настроить это отношение с собственным типом ссылки в Fluent API?