Как использовать дочерний / производный класс в коллекции в свойстве навигации и настроить соответствующие ограничения в 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>
. И вы не можете просто бросить бросок перед ним.