与EF代码优先的一对一关系 - 外键不正确

时间:2013-07-28 21:14:43

标签: ef-code-first entity-framework-5 ef-migrations

我正在尝试在需要两端的两个实体之间创建一对一的关系。它们是基本实体,就像这样

public class EntityA
{
    public int? EntityAID {get; set;}
    public virtual EntityB EntityB {get; set;
}

public class EntityB
{
    public int? EntityBID {get; set;}
    public virtual EntityA EntityA {get; set;
}

我有一个EntityA的EntityTypeConfiguration对象,用于配置关系。我希望entityA成为关系中的主体,如果我正确理解这个过程,则意味着EntityB将在其数据库表中拥有EntityA的外键。这是我的configuratoin声明

HasRequired(e=>e.EntityB).WithRequiredPrincipal(e=>e.EntityA);

我正在使用Code First Migration更新我的数据库。当我生成将建立此关系的迁移时,迁移正确地识别了将EntanyB的外键放在表上所需的事实,但它正在为EntityA的表创建具有EntityB主键的外键,像这样:

.ForeignKey("dbo.TableForEntityB", t => t.EntityBID)

它应该使用EntityA的ID作为外键。

有人看到我做错了什么吗?我很难过。我尝试过使用WithRequiredDependent,所有这一切都是在TableForEntityA上创建一个相同的情况。

感谢。

2 个答案:

答案 0 :(得分:0)

我正在猜测这里的工作,但我认为创建的外键不在EntityB表的主键上。 EntityBID类中的EntityB不是EntityB的主键,显然是因为您将其指定为Nullable类型,那么它是什么?

答案 1 :(得分:0)

这源于我对EF实施的一对一关系的误解。我读了一下,发现EF在制定一对一的关系时使用了共享的主键关系。所以我将EntityB改为这样:

public class EntityB
{
    public int? EntityAID {get; set;}
    public virtual EntityA EntityA {get; set;
}

然后配置这样的关系:

HasRequired(c => c.EntityA).WithRequiredDependent(p => p.EntityB);

配置EntityB时。