是否有任何方法可以在 EF6 代码优先(或 EDMX,就此而言)配置条件导航。
我有一个实体类型,它将被我的多种其他类型引用。
附件属于人员或车辆。一个人或一辆车可能有许多附件。可能会有更多类型具有许多附件。
我知道我可以为每种类型的附件创建一个可为空的外键,或者为每种类型创建一个 1 - 0..1 - * 表,但我想将它们全部保存在一个表中,而不必添加更多列如果可能的话。
public class Attachment {
public virtual Person Person {get;set;}
public virtual Vehicle Vehicle {get;set;}
// how I want to achieve it (i.e. columns I would expect to see in the DB):
public Type ForeignType {get;set;} // typeof(Person), typeof(Vehicle), etc
public int ForeignKey {get;set;}
}
public class Person {
public int Id {get;set;}
public virtual ICollection<Attachment> Attachments {get;set;}
}
public class Vehicle {
public int Id {get;set;}
public virtual ICollection<Attachment> Attachments {get;set;}
}
然后我想配置类似的关系......
modelBuilder.Entity<Attachment>()
.HasOptional<Person>(a => a.Person).When(a => a.ForeignType == typeof(Person))
.WithMany(p => p.Attachments);
modelBuilder.Entity<Attachment>()
.HasOptional<Vehicle>(a => a.Vehicle).When(a => a.ForeignType == typeof(Vehicle))
.WithMany(p => p.Attachments);
是否有可能与此类似,或者我应该只实施其他解决方案之一?