如何在不同的超表中使用相同的子表来定义MVC数据库结构

时间:2012-07-23 14:24:49

标签: asp.net-mvc-3 entity-framework ef-code-first

我正在使用MVC的Code First方法制作小时日历。这是自下而上的数据结构:

所有类都包含表元素ID DaySpec包含一天的开始和结束时间 WeekSpec在琐碎的布尔人中包含一系列DaySpecs ExceptionHoursSet定义了一般小时模式的例外小时数,它包含一个整数RepCount和一个对象HoursSet; RepCount指定异常重复的次数,并且HoursSet是DaySpec或WeekSpec Schedule包含一个字符串Name,一个WeekSpec,它每周指定一般模式,以及一个IEnumerable of ExceptionHoursSets。

右。

所以我的问题是,在Schedule和ExceptionHoursSet中使用WeekSpec类,我可以在数据库结构中的两者之间共享吗?我如何建立EF关系?

1 个答案:

答案 0 :(得分:0)

当然可以!

如果您使用Entity Framework的Code First方法执行此操作,则只需将外键关系作为类型包含在类中:

public class DaySpec
{
    public int DaySpecId { get; set; }

    public DateTime Open { get; set; }

    public DateTime Close { get; set; }
}

public class WeekSpec
{
    public int WeekSpecId { get; set; }

    public bool booleanOne { get; set; }

    public DaySpec[] DaySpecs { get; set; }
}

public class ExceptionHoursSet
{
    public int ExceptionHoursSetId { get; set; }

    public int RepCount { get; set; }

    public int WeekSpecId { get; set; } // set which WeekSpec you are referencing below (for lazy-loading)

    public virtual WeekSpec HoursSet { get; set; }

    // etc . . .
}

public class Schedule
{
    public int ScheduleId { get; set; }

    public string Name { get; set; }

    public int WeekSpecId { get; set; } // set which WeekSpec you are referencing below (for lazy-loading)

    public virtual WeekSpec WeekSpec { get; set; }

    public IEnumerable<ExceptionHoursSet> ExceptionHoursSets { get; set; } 
}

我可能已经留下了一些属性,但你明白了(必要时填写)。有不同的方法可以处理这种情况(延迟加载等等),它完全取决于你需要对数据做什么。