EF:无法确定类型之间关联的主要终点

use*_*360 3 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; }
}
Run Code Online (Sandbox Code Playgroud)

`

员工缺勤可以是与提到的缺勤不同的员工。

这种情况有什么解决办法吗?

Eri*_*sch 5

好吧,首先..当您遵循实体框架约定时,无需指定ForeignKey。按照惯例,EF将重新认识到您的Navigation属性称为Foo,而ForeignKey将称为FooId的事实。

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

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

如果您考虑一下,这是有道理的。SQL中没有没有共享主键的本机1:1关系。如果在一个表中向另一个表添加FK,则会创建1:1。您可以通过在FK上创建唯一约束来模拟1:1,但是EF不支持约束。

看你的模型。你真的要1:1吗?员工真的只能缺席一次吗?曾经吗 可能不会。您可能希望缺勤成为1:1。因此,删除AbsenceId并将Absence更改为:

public virtual List<Absence> Absences { get; set; }
Run Code Online (Sandbox Code Playgroud)