【问题标题】:How to define an MVC database structure using the same sub-table in different super-tables如何在不同的超表中使用同一个子表定义一个MVC数据库结构
【发布时间】:2012-07-21 19:17:56
【问题描述】:

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

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

没错。

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

【问题讨论】:

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


    【解决方案1】:

    当然可以!

    如果您使用 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; } 
    }
    

    我可能遗漏了一些属性,但您明白了(在必要时填写)。有多种方法可以处理这种情况(延迟加载等),这完全取决于您需要对数据做什么。

    【讨论】:

    • 非常感谢,我认为这可行,只是我需要使用 ICollections 而不是数组和 IEnumerables。
    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2019-03-17
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    相关资源
    最近更新 更多