我有两个表Employees和Positions。
EmployeeId(PK)
PositionId(FK,Nullable)
PositionId(PK)
可以创建一个位置而不是分配位置。但是,活跃的员工需要职位。职位只能分配给一名员工。我们通过在Employee.PositionId上使用唯一约束来强制执行此操作。
在我的模型中,我希望在位置中拥有一个Employee属性,并且我遇到了映射问题。
我试过
modelBuilder.Entity<Employee>().HasRequired(e => e.Position)
.WithOptional(p => p.Employee);
然而,最终将Employee.EmployeeId映射到Position.PositionId列,而不是将Employee.PositionId映射到Position.PositionId(至少从我能说的...)
即使我强迫1-1通过唯一约束,我唯一的选择是将此地图设为一对多关系吗?
答案 0 :(得分:1)
Code First(和一般的EF)本身不支持一对一的外键关联。实际上,EF不支持任何涉及独特约束的关联场景。
流利的api:
modelBuilder.Entity<Employee>()
.HasRequired(e => e.Position)
.WithMany()
.HasForeignKey(e => e.PositionId);
然后覆盖Seed
方法:
protected override void Seed(EntityMappingContext context)
{
context.Database.SqlCommand("ALTER TABLE Employees ADD CONSTRAINT uc_Position UNIQUE(PositionId)");
}