我正在尝试在需要两端的两个实体之间创建一对一的关系。它们是基本实体,就像这样
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上创建一个相同的情况。
感谢。
答案 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时。