私はEFコードファーストバージョン6.0で採用プロセスを構築しています。私はLINQPadで次のクエリを実行するたびにEntity Frameworkバージョン6.0テーブル単位の階層型クエリは、派生型からフィールドを取得します
[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
}
:私は表あたりのタイプを使用して実装されています以下の(非常に略す)継承階層を持っている
Applicants.Where(x => x.UserName == "johndoe999")
クエリが関連付けられたフィールドを返します。私が期待していなかった派生クラスEmployee(HireDate、WorkPhone、JobTitle)。私は明らかに、「従業員」の関連分野を省略することを願っています。 これは、階層ごとのテーブルと同じ階層を実装したときには発生しません。それは私にテーブル当たりの同じ動作を与える必要があります、それはしないでください?この動作を有効にするために何か他に必要なことはありますか?
は、しかし私は、これは、EFのかなり古いバージョンに関連した'11からであるように(Entity Framework Table Per Type Performance)として、この問題にはいくつかの言及を見てきました。
あなたが '応募者 'を取得した場合、あなたは必ず*従業員も取得します。型のプロパティを反映するコンポーネントは 'Employee'プロパティを表示します。私はあなたがタイプを並べて継承していない限り、それがTPHで起こらなかったとは想像できません。 –