我正在使用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)关联的字段,这是我没想到的。当我要求的是申请人时,我显然希望它省略“员工”相关字段。 每当我实现与table-per-hierarchy相同的层次结构时,就不会发生这种情况。它应该给我与Table-per-type相同的行为,不应该吗?我还需要做些什么才能启用此行为吗?
我已经看过一些关于这个问题的引用,例如(Entity Framework Table Per Type Performance),但是这是来自' 11与更老版本的EF有关。
答案 0 :(得分:0)
显然,即使在EF 6.1中也不支持此功能。我在codeplex上找到了以下工作项:
https://entityframework.codeplex.com/workitem/2332
这是一篇文章的链接,通过将Dapper ORM与实体框架混合来解释变通方法。根据作者的表现,性能急剧提升。
以下是EF关于EF 7版本1.0的github页面的讨论,该页面实际上完全省略了TPT,但他们声明他们最终会将TPT放回到EF 7中。我只是略读了这篇文章,但它并不是明确他们是否会在将TPT添加到EF 7时解决TPT的性能问题,或者它是否与版本6.1中的相同。
我将使用Dapper ORM或者找到一种不同的方法来建模我的数据。