我正在开发一个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
不是EmployeePerson
或CustomerPerson
。我在让EF接受它时遇到了一些麻烦,当我尝试按ID加载这样的实体时,EF生成的丑陋查询不会返回任何行。
之前有没有人实现过这样的事情? TPT样式的映射是否始终要求基类是抽象的?我没有找到任何相反的例子,但也没有真正的确认。如果必须的话,我可以想到一些我可以使用的丑陋的解决方法,但是如果有的话我会更喜欢更优雅的解决方案。
(还有一个问题:我正在攻击第三方数据库,所以我无法对架构进行任何更改。)
谢谢!
答案 0 :(得分:3)
如果你的“丑陋”解决方案是引入一个抽象基类PersonBase
(或类似的)并使Person
成为一个空的派生类,我的评论将是:做到这一点!它根本不丑陋,因为它为以后更改Person
留下了空间而不影响其他派生类。目前,这将更加困难。您必须稍后介绍抽象类,这是对现有代码的一个更大的改变。
关于你的问题:我不能用EF 5(VS 2012 .Net 4.5)重复这一点。也许你的真实模型还有更多的事情发生。