0

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

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 的外键。这是我的配置声明

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

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

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

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

有人看到我做错了吗?我难住了。我试过使用WithRequiredDependent,所做的只是在TableForEntityA 上创建一个相同的情况。

谢谢。

4

2 回答 2

0

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

于 2013-07-30T13:23:17.280 回答
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时。

于 2013-08-01T01:06:53.397 回答