无法确定类型之间关联的主要结束。必须使用关系流畅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; }
}
`
员工缺席的情况可能是员工与提及缺勤的员工不同。
针对此案例的任何解决方案?
答案 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; }