实体框架:映射现有表,没有参考完整性

时间:2012-10-03 18:48:23

标签: asp.net entity-framework entity-framework-5

在这种情况下,我有一个包含三个模型的现有数据库:

Address,其中包含'AddressId','ParentId','City','State'等

Person,其中包含'PersonId','Name'等。

Company,其中包含'CompanyId','Name'等。

因为Address可以包含多于一个表的模型的行,所以没有外键; Address列'ParentId'将包含'PersonId'或'CompanyId'。

要生成我的DbContext,我使用了Entity Framework Power Tools Beta 2.由于缺少参照完整性,它为PersonCompany生成的类不包含集合像他们应该的地址。

我如何更改要添加到“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;
   }
}

谢谢!

2 个答案:

答案 0 :(得分:2)

如果可以,您应该在地址表中添加一个唯一的ID,然后将该ID与其所属的实体一起存储,无论是个人,公司,供应商等。

如果由于多地址方案而无法使用,则可以创建一个新表AddressXRef表,该表存储实体(供应商,个人,公司等)的GUID以及地址的GUID;因此,每个实体都可以拥有多个地址,EF会对此设置非常满意,因为周围会有密钥。

(我也想在Xref表上找到某种地址类型指示器,所以我知道它是什么类型的地址,邮寄,运送等)

答案 1 :(得分:0)

CompanyPerson创建具有您在其中创建的属性的部分类。

public partial class Company
{
   public IEnumerable<Address> Addresses { ... }
}