我需要每个层次结构的表混合或在实体框架中键入

时间:2013-02-11 18:57:28

标签: entity-framework-5

我有3个实体,我想将它们用作EF作为POCO:

TimeTable是Period和LessonPlanner类的基类。

如何在EF 5.0或更高版本中使用/映射这3个类?

我想创建2个sql表:Period和LessonPlanner。

EF仅支持每个层次结构的表或每种类型的表。

要么我得到一个包含所有属性的表作为字段,要么我得到3个单独的表。

我只想要2张桌子,无论我采取什么方法,我都不在乎:数据库/型号/代码优先......

public class TimeTable
{
    public int Id { get; set; }
    public int LessonNumber { get; set; }
    public string SchoolclassNumberForSunday { get; set; }
    public string SchoolclassNumberForMonday { get; set; }
    public string SchoolclassNumberForTuesday { get; set; }
    public string SchoolclassNumberForWednesday { get; set; }
    public string SchoolclassNumberForThursday { get; set; }
    public string SchoolclassNumberForFriday { get; set; }
    public string SchoolclassNumberForSaturday { get; set; }
}

public class Period : TimeTable
{        
    public enum WeekType
    {
        A,
        AB,
    }
}

public class LessonPlanner : TimeTable
{
    public DateTime LessonDate { get; set; }
}

1 个答案:

答案 0 :(得分:1)

首先在Entity Framework 5中使用代码,在DbContext派生类中,覆盖OnModelCreating并添加以下代码。我没有尝试过你的类型,但是我使用了一个变体为三个深层次结构创建了两个类。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Period>()
                    .Map<Period>(p => p.MapInheritedProperties())
                    .ToTable("Period");

        modelBuilder.Entity<LessonPlanner>()
                    .Map<LessonPlanner>(lp => lp.MapInheritedProperties())
                    .ToTable("LessonPlanner");
    }