如何在导航属性的集合中使用子类/派生类,并在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>
。而且你不能只是在它前面丢下一个演员。
答案 0 :(得分:0)
似乎无法完成。我必须在Consumer和Supplier中显式创建WidgetId。一点点软糖就可以使EF正常工作。