Entity Framework 6 WithMany и производные типы - PullRequest
0 голосов
/ 02 ноября 2018

Как использовать дочерний / производный класс в коллекции в свойстве навигации и настроить соответствующие ограничения в Entity Framework 6?

Учитывая данную модель:

// Base class
public abstract class Person 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int WidgetId { get; set; }
    public virtual Widget Widget { get; set; }
}

// Child classes
public class Consumer : Person { ... }
public class Supplier : Person { ... }

// Compositing principal class
public class Widget 
{
    public int Id { get; set; }
    public virtual Supplier Supplier { get; set; }
    public virtual ICollection<Consumer> Consumers { get; set; }
}

Виджет имеет отношение один-к-одному с Supplier и отношение ноль-ко-многим с Customer.

Как настроить отношение Consumer с учетом наследования?

Моя попытка до сих пор:

public class PersonSchema : EntityTypeConfiguration<Person> 
{
    public PersonSchema() 
    {
        ...
        HasRequired(p => p.Widget)
           .WithMany(w => w.Consumers) // INVALID CAST
           .HasForeignKey(p => p.WidgetId);
           ...
    } 
}

Я сократил код для краткости, но я чувствую, что это иллюстрирует, где проблема.

Проблема с WithMany, так как она имеет тип ICollection<Consumer> и ожидает ICollection<Person>. И вы не можете просто бросить бросок перед ним.

1 Ответ

0 голосов
/ 30 января 2019

Кажется, это невозможно сделать. Мне пришлось явно создать WidgetId в Consumer and Supplier. Немного грязной выдумки, чтобы заставить EF работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...