0

我遇到了以我想要的方式生成数据库映射的问题。我不确定这是否只是系统的限制,或者我做错了什么。

这是一个简化版本,但演示了同样的问题。

public abstract class Contactable
{
  public Guid Id { get; set; }
  public ICollection<ContactInformation> ContactInformation { get; private set; }

  public IEnumerable<Address> Addresses { get { return ContactInformation.OfType<Address>(); }
  public IEnumerable<Phone> Addresses { get { return ContactInformation.OfType<Phone>(); }
}

public class Person{}
public class Company{}

public abstract class ContactInformation
{
  public Guid Id { get; set; }
  public Guid Contactable_Id { get; set; |

  public ICollection<Attribute> Attributes { get; private set; }
}

public class Address : ContactInformation{}
public class Phone : ContactInformation{}

我已经以 TPC 格式映射了 Contactable 对象,因此会有一个人和一个公司。ContactInformation 以 TPH 形式存储,都共享同一个表。(这样做是因为系统中的使用模式。)我想将 Contactable_Id 公开为 Contact Information 上的一个属性,这样我就可以直接加载它,而无需从数据库中读取 Contactable。但由于某种原因,使用以下映射:

HasMany(e => e.ContactInformation).WithRequired().HasForeignKey(x => x.Contactable_Id);

我得到该属性 Contactable_Id 和 Contactable_Id1 的两列。我现有的代码在保存之前将所有联系信息添加到可联系信息似乎写入 Contactable_Id1,并将 enw 代码写入 Contactable_id。关于我哪里出错的任何想法?

}

4

0 回答 0