【问题标题】:Entity Framework 5: Table-per-Type mapping with concrete base class实体框架 5:具有具体基类的 Table-per-Type 映射
【发布时间】:2013-04-04 02:01:05
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 你说得对,我运行的简化测试显然还不够简化——一个完全微不足道的示例按我希望的方式工作。现在找出我在其他地方做了什么导致这个......感谢您的帮助!
    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多