4

我正在开发一个 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 场景,除了基类不是抽象的障碍——可能有一个Personwho 不是 anEmployeePerson或一个CustomerPerson. 我在让 EF 接受这一点时遇到了一些麻烦,当我尝试按 ID 加载这样的实体时,EF 生成的丑陋查询不返回任何行。

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

(另一个障碍:我正在使用第三方数据库,因此我无法对架构进行任何更改。)

谢谢!

4

1 回答 1

3

如果您的“丑陋”解决方案是引入一个抽象基类PersonBase(或类似的)并创建Person一个空的派生类,我的评论是:去做吧!它一点也不难看,因为它在Person不影响其他派生类的情况下为以后的更改留出了空间。目前,这将更加困难。稍后您必须引入抽象类,这是对现有代码的一个更剧烈的变化。

关于您的问题:我无法使用 EF 5(VS 2012 .Net 4.5)重现该问题。也许你的真实模型中发生了更多的事情。

于 2013-04-11T19:05:12.087 回答