0

假设我有一个抽象的 Person 表,以及派生表、Student 和 Teacher、Admin 等。Person 有一个枚举属性 PersonType,其中包含每个派生类的值,以及一个虚拟集合 Events。

现在,当 Entity Framework 创建 Events 表时,它会为从 Person 派生的每个类创建一个列,例如。Student_Id、Teacher_Id、Admin_Id 等。

如果我有十几个派生类,那就是十几个额外的列,其中只有 1 个在使用中。

如何告诉 Entity Framework 将 PersonType 属性与 Id 结合使用,而不是创建所有这些不必要的列?

4

1 回答 1

0

所以如果我理解正确的话,它有一个简单的 DataAnnotations 解决方案。

[Column("TableID")]

我将从我的一个项目中为您提供一个工作示例。所以我有一个抽象类,它调用了Trip. Cruise并且Hotel类是从Trip类派生的。我需要将评论存储在单个表上,正如您所担心的那样,我不需要CruiseID也不HotelID在评论表上,所以我TripID用列注释命名,如果我们注释得当,实体框架将神奇地创建表

public class Comment
{
     public int CommentID { get; set; }
     [Column("TripID")]
     [ForeignKey("Trip")]
     public int TripID { get; set; }
     public virtual Trip Trip { get; set; }
     public string Text { get; set; }
}

public class CruiseComment : Comment
{
    [Column("TripID")]
    [ForeignKey("Cruise")]
    public int CruiseID { get; set; }
    public virtual Cruise Cruise { get; set; }

}

public class HotelComment : Comment
{
    [Column("TripID")]
    [ForeignKey("Cruise")]
    public int HotelID { get; set; }

    public virtual Hotel Hotel { get; set; }
}

没有必要使用ForeignKey注释。当您有不同的命名时需要它。

于 2015-12-10T04:42:53.577 回答