我对 EF Code First 还很陌生,这可能(希望!)是一个简单的问题。
我在人员和地址之间有一个简单的关系:
People
------
PersonID
Name
Address
-------
AddressID
Address1
PersonID
大多数时候,我的 People 表中都有 AddressID;但是这个数据库有点“倒退”,因为它引用了 PersonID。在我的代码中,我处理 Person 对象并希望获取它们的关联地址。这种关系可能是 1 个人拥有多个地址,但始终是 1:1。(这是第 3 方数据库 - 我无法控制架构。)
我将如何在 Code First 中设置关系以关联人员和地址?我正在使用流利的 API,但我看不到在两个实体中都没有密钥的情况下设置它的方法。理想情况下,我希望我的实体设置如下:
Person {
public int PersonID {get;set;}
public string Name {get;set;}
//other person properites
//navigation property
public Address Address {get;set;}
}
Address {
public string Address1 {get;set;}
//other properties for address
//navigation property
public Person Person {get;set;}
}
我尝试了几种配置关系的方法,但总是出错。我尝试将 Address 类定义为复杂类型,但由于它是一个单独的表,这可以工作吗?此外,我尝试使用 HasOptional 和 WithOptionalDependant,但无济于事。
因此,关于如何最好地配置我的 EF CF 逻辑以允许 Address 成为 Person 中的实体的任何想法。
非常感谢任何建议或帮助。
更新 我在下面尝试了马克的建议,但我得到了一个不同的错误。(见我的评论)
我的地址实体设置将 PersonID 设置为实体键:
modelBuilder.Entity<Address>()
.HasKey(a => a.PersonID);
modelBuilder.Entity<Address>()
.Property(a => a.PersonID)
.HasColumnName(<my real column name>);
所以实体在数据库中的键是 PersonID,但它也是一个返回到 Person 的 FK。这是造成问题的原因吗?(同样,不是我的数据库——它是第 3 方。)非常感谢任何帮助。谢谢!!