我正在使用EF Code First版本6.0构建一个招聘流程。我使用Table-per-Type实现了以下(高度简化的)继承层次结构:
[Table("Person")]
public class Person
{
[Key]
public int PersonId { get; set; }
[StringLength(30)]
public string FirstName { get; set; }
[StringLength(30)]
public string MiddleName { get; set; }
[StringLength(30)]
public string LastName { get; set; }
}
[Table("Applicants")]
public class Applicant : Person
{
//Various Applicant properties
[StringLength(256)]
public string UserName { get; set; }
}
[Table("Employees")]
public class Employee : Applicant
{
public DateTime HireDate { get; set; }
[StringLength(20)]
public string WorkPhone { get; set; }
[StringLength(30)]
public string JobTitle { get; set; }
//Various other Employee Properties
}每当我在LINQPad中执行以下查询时:
Applicants.Where(x => x.UserName == "johndoe999")查询返回与派生类Employee (HireDate、WorkPhone、JobTitle)关联的字段,这是我不希望看到的。我显然希望它省略与“Employee”相关的字段,而我所要求的都是申请者。每当我实现与每个层次结构的表相同的层次结构时,就不会发生这种情况。它应该给我提供与Table-per-type相同的行为,不是吗?要启用此行为,我还需要执行其他操作吗?
我看过一些关于这个问题的引用,比如(Entity Framework Table Per Type Performance),但是这是从11年来的,与一个更老的EF版本有关。
发布于 2016-08-03 05:11:25
显然,即使是在EF 6.1中也不支持这一点。我在codeplex上找到了以下工作项:
https://entityframework.codeplex.com/workitem/2332
这里有一篇文章的链接,解释了一种通过混合Dapper ORM和Entity Framework来解决的方法。根据作者的说法,性能会显着提高。
http://blog.falafel.com/how-to-improve-the-performance-of-tpt-inheritance-mapping-in-entity-framework/
这里是EF的github页面上关于EF7版本1.0的讨论,它实际上完全省略了TPT,但他们表示他们最终会把TPT放回EF7中。我只是浏览了一下这篇文章,但不清楚当他们将TPT添加到EF7中时,他们是否会解决TPT的性能问题,或者它是否会像6.1版本中一样工作。
我要么使用Dapper ORM,要么找到一种不同的方法来建模我的数据。
https://stackoverflow.com/questions/38729421
复制相似问题