实体框架:如何为同一个表注释两个一对一的关系

时间:2015-06-15 15:35:06

标签: entity-framework

在打卡时钟应用程序中,给定日期有两个外键进入打孔表:PunchId_In和PunchId_Out。您如何注释此关系,以便实体框架按预期创建它?注意:这些外键中的一个或两个可能未定义(null)。

public class Day
{
    public int DayID { get; set; }
    public int? PunchId_In { get; set; }
    public int? PunchId_Out { get; set; }
    public virtual Punch PunchIn { get; set; }
    public virtual Punch PunchOut { get; set; }
}

public class Punch
{
    public int PunchID { get; set; }
    public DateTime PunchDT { get; set; }
}

TIA

2 个答案:

答案 0 :(得分:0)

您可以考虑重新设计模型。

根据您分享的信息:您的模型假设您每天只进行一次打卡,并且不会跟踪谁打入或打出。

你可以有一个“拳击”列表

  • ID
  • 谁 - 链接到人员表
  • 何时 - 日期时间
  • 类型 - (输入/输出)

然后根据需要过滤列表

答案 1 :(得分:0)

您需要指明哪个外键与每个导航属性匹配。

public class Day
{
    public int DayID { get; set; }
    public int? PunchId_In { get; set; }
    public int? PunchId_Out { get; set; }

    [ForeignKey("PunchId_In")]
    public virtual Punch PunchIn { get; set; }

    [ForeignKey("PunchId_Out ")]
    public virtual Punch PunchOut { get; set; }
}

https://msdn.microsoft.com/en-us/data/jj591583.aspx#Relationships