Entity Framework не может отобразить отношения между классами

Я просмотрел много постов, но так и не нашел проблему, похожую на мою.

По какой-то причине я не могу правильно отобразить отношения между классами при создании базы данных с использованием EF Code First

Классы - Заказать абстрактный класс

public abstract class Order : IObjectWithState
{
    public int OrderId { get; set; }

    public OrderType Type { get; set; }
    public string Status { get; set; }

    [NotMapped]
    public State ObjectState { get; set; }

    public string CustomerId { get; set; }
}

И два класса, которые реализуют это:

public class SampleOrder : Order
{
    public DateTime CreationDate { get; set; }
    public DateTime CompletionDate { get; set; }

    public virtual ICollection<OrderItem> OrderItems { get; set; }
    public virtual Address BillAddress { get; set; }
}

public class HideOrder : Order
{
    public DateTime CreationDate { get; set; }
    public DateTime CompletionDate { get; set; }
    public bool Paid { get; set; }

    public virtual ICollection<OrderItem> OrderItems { get; set; }
    public virtual Address BillAddress { get; set; }
}

Это адресный класс:

public class Address : IObjectWithState
{
    public int AddressId { get; set; }

    public string AddressLine { get; set; }
    public string Country { get; set; }
    public string PostalCode { get; set; }
    public bool Main { get; set; }
    public string CustomerId { get; set; }

    [NotMapped]
    public State ObjectState { get; set; }
}

Мой контекстный класс выглядит так:

public PhoeniceContext() : base("Phoenice")
{
}

public DbSet<Address> Addresses { get; set; }
public DbSet<SampleOrder> SampleOrders { get; set; }
public DbSet<HideOrder> HideOrders { get; set; }
public DbSet<OrderItem> OrderItems { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<SampleOrder>().Map(m =>
    {
        m.MapInheritedProperties();
        m.ToTable("SampleOrders");
    });

    modelBuilder.Entity<HideOrder>().Map(m =>
    {
        m.MapInheritedProperties();
        m.ToTable("HideOrders");
    });
}

Когда я пытаюсь создать базу данных, я получаю сообщение об ошибке:

Ассоциация 'SampleOrder_BillAddress' между типами сущностей 'SampleOrder' и 'Address' недопустима. В иерархии TPC независимые ассоциации разрешены только для большинства производных типов.

Если я закомментирую свойства BillAddress из обоих классов заказов, сопоставление с OrderItems будет работать правильно. Почему сопоставление с элементом Address не работает так же хорошо?

0 ответов

Другие вопросы по тегам