在这种情况下,我有一个包含三个模型的现有数据库:
Address
,其中包含'AddressId','ParentId','City','State'等
Person
,其中包含'PersonId','Name'等。
Company
,其中包含'CompanyId','Name'等。
因为Address
可以包含多于一个表的模型的行,所以没有外键; Address
列'ParentId'将包含'PersonId'或'CompanyId'。
要生成我的DbContext
,我使用了Entity Framework Power Tools Beta 2.由于缺少参照完整性,它为Person
和Company
生成的类不包含集合像他们应该的地址。
我如何更改要添加到“Addresses”属性中的类,并确保它正确映射到Address表?
此刻我正在做这样的事情;如果可能的话,我宁愿使用上下文映射:
public IEnumerable<Address> Addresses
{
get
{
IEnumerable<Address> addresses = null;
using(MyDb db = new MyDb())
{
addresses = db.Addresses.Where(a => a.ParentId == this.PersonId)
}
return addresses;
}
}
谢谢!
答案 0 :(得分:2)
如果可以,您应该在地址表中添加一个唯一的ID,然后将该ID与其所属的实体一起存储,无论是个人,公司,供应商等。
如果由于多地址方案而无法使用,则可以创建一个新表AddressXRef表,该表存储实体(供应商,个人,公司等)的GUID以及地址的GUID;因此,每个实体都可以拥有多个地址,EF会对此设置非常满意,因为周围会有密钥。
(我也想在Xref表上找到某种地址类型指示器,所以我知道它是什么类型的地址,邮寄,运送等)
答案 1 :(得分:0)
为Company
和Person
创建具有您在其中创建的属性的部分类。
public partial class Company
{
public IEnumerable<Address> Addresses { ... }
}