EF:无法确定类型之间关联的主要结束

时间:2015-01-19 16:48:25

标签: entity-framework

无法确定类型之间关联的主要结束。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。

型号:

`

[Table("Employees")]
public class Employee : Entity
{
    public string Name { get; set; }
    public int? AbsenceId { get; set; }
    [ForeignKey("AbsenceId")]
    public virtual Absence Absence { get; set; }
}

[Table("Absences")]
public class Absence : Entity
{
    public DateTime From { get; set; }
    public DateTime To { get; set; }
    public string Reason { get; set; }
    public int? SubstituteId { get; set; }
    [ForeignKey("SubstituteId")]
    public virtual Employee Substitute { get; set; }
}

`

员工缺席的情况可能是员工与提及缺勤的员工不同。

针对此案例的任何解决方案?

1 个答案:

答案 0 :(得分:4)

嗯,首先..当您遵循实体框架约定时,不需要指定ForeignKey。按照惯例,EF将重新识别您的Navigation属性被称为Foo并且您的ForeignKey将被称为FooId这一事实。

然而,真正的问题是你试图在两个实体之间创建一个1:1的关联,EF不支持这样的关联。

EF仅支持与共享主键的1:1关联,即两个表具有相同的主键,并且一个表的PK是对另一个表的PK的FK。

如果你想到这一点,那就有道理了。 SQL中没有本机1:1关系,没有共享主键。如果在一个表中将FK添加到另一个表中,则会创建1:多个。您可以通过在FK上创建唯一约束来模拟1:1,但EF不支持约束。

看着你的模特。你真的想要1:1吗?员工真的只能有一次缺勤吗?自从?可能不是。你可能希望Absence成为1:很多。因此,删除AbsenceId并将Absence更改为:

public virtual List<Absence> Absences { get; set; }