EF 4.1一对一映射

时间:2011-10-05 15:44:03

标签: entity-framework entity-framework-4.1

我有两个表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通过唯一约束,我唯一的选择是将此地图设为一对多关系吗?

1 个答案:

答案 0 :(得分:1)

引自:http://weblogs.asp.net/manavi/archive/2011/01/23/associations-in-ef-code-first-ctp5-part-3-one-to-one-foreign-key-associations.aspx

  

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)");
}