如何建立一到七种关系,每种关系中只有一种 - 实体框架

时间:2016-10-08 07:51:32

标签: c# asp.net entity-framework linq

我有一个名为"周"有一个" Day"一天有一个Enum" DayOfWeek"其中包括"星期一","星期二","星期四","星期五"和"星期天"

"周"模型

public class Day
{
    public string Id { get; set; } = Guid.NewGuid().ToString();
    public Week.Week Week { get; set; }
    //This is my key (for "week") each week should only have one "Monday", one "Tuesday", etc
    public DayOfWeek DayOfWeek { get; set; }
    public virtual List<Class.Class> Classes { get; set; }
}

&#34;日&#34;模型

{{1}}

每个&#34;周&#34;应该只能有一种类型的&#34; Day&#34;,one&#34; Monday&#34;,one&#34; Tuesday&#34;,one&#34; Wednesday&#34 ;等
如何通过数据注释/关系来实现这一点 谢谢,来自Dylan

1 个答案:

答案 0 :(得分:0)

我认为你可以通过两种方式实现这一目标:

  1. 仅使用验证
  2. 实施IValidatableObject并检查其中日期的唯一性。

    1. Day上使用复合主键,其中包含Week ID和DayOfWeek
    2. 这会将约束放在物理模型上,并在概念上使Day成为Week的“子实体”。

      你可以这样做(你可能需要调整,我没时间试试):

      public class Day
      {
        public Week.Week Week { get; set; }
        [Key] 
        [Column(Order = 2)] 
        public DayOfWeek DayOfWeek { get; set; }
        public virtual List<Class.Class> Classes { get; set; }
      
        [Key] 
        [Column(Order=1)] 
        // Helper for PK; EF will recognize this as the FK by convention
        public string WeekId { get; set; }
      }
      

      您也可以通过the fluent interface进行类似的配置,而不是使用属性。