TPT 継承を使用する次のエンティティ フレームワーク モデルを検討してください。
DB テーブル:
Person (PersonID, Name)
Student (PersonID, Grade)
EF エンティティ:
Person (PersonID, Name)
Student (Grade) : inherits from Person
データベースから人のエントリを選択しようとすると、代わりに学生タイプが返されます。
var person = db.Persons.First();
// person here is of type Student and has Grade peoperty populated
// SQL query generated by EF selects data from both tables with a JOIN
このクエリで、Person db テーブルと Student db テーブルの両方からではなく、Person db テーブルからのみデータを選択するように強制するにはどうすればよいですか?
たとえば、次のクエリで実行できます。
db.Persons.Select(x => new Person { PersonID = x.PersonID, Name = x.Name }).First()
しかし、それは不十分に見え、既存のクエリに対して余分な SELECT ステートメントを生成し、この方法で返された Person エンティティ オブジェクトは EF コンテキストによって追跡されません。では、なぜオブジェクトをdb.Persons.First()
返すのか疑問に思っています。Student
直感に反していませんか?