无法确定类型之间关联的主要终点。必须使用关系流利的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)
`
员工缺勤可以是与提到的缺勤不同的员工。
这种情况有什么解决办法吗?
好吧,首先..当您遵循实体框架约定时,无需指定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)
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |