实体框架5:具有特定基类的每个类型的表映射

时间:2013-04-11 18:29:10

标签: .net entity-framework inheritance ef-code-first table-per-type

我正在开发一个EF5 Code First应用程序,到目前为止一直进展顺利,但我遇到了一个问题,我希望有人能提出解决方案。

基本上,我有一个基类和一些派生类,我想知道如何处理它们的映射。这是一个荒谬简化的例子:

[Table("Person")]
public class Person
{
  public int PersonId { get; set; }
  public string Name { get; set; }
}

[Table("EmployeePerson")]
public class EmployeePerson : Person
{
  public int HoursWorked { get; set; }
}

[Table("CustomerPerson")]
public class CustomerPerson : Person
{
  public int DollarsSpent { get; set; }
}

到目前为止,这是一个典型的Table-per-Type场景,除了基类抽象的故障 - 它可能有一个Person不是EmployeePersonCustomerPerson。我在让EF接受它时遇到了一些麻烦,当我尝试按ID加载这样的实体时,EF生成的丑陋查询不会返回任何行。

之前有没有人实现过这样的事情? TPT样式的映射是否始终要求基类是抽象的?我没有找到任何相反的例子,但也没有真正的确认。如果必须的话,我可以想到一些我可以使用的丑陋的解决方法,但是如果有的话我会更喜欢更优雅的解决方案。

(还有一个问题:我正在攻击第三方数据库,所以我无法对架构进行任何更改。)

谢谢!

1 个答案:

答案 0 :(得分:3)

如果你的“丑陋”解决方案是引入一个抽象基类PersonBase(或类似的)并使Person成为一个空的派生类,我的评论将是:做到这一点!它根本不丑陋,因为它为以后更改Person留下了空间而不影响其他派生类。目前,这将更加困难。您必须稍后介绍抽象类,这是对现有代码的一个更大的改变。

关于你的问题:我不能用EF 5(VS 2012 .Net 4.5)重复这一点。也许你的真实模型还有更多的事情发生。

相关问题