2

是否有任何方法可以在 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);

是否有可能与此类似,或者我应该只实施其他解决方案之一?

4

0 回答 0