データベースの ORM として Entity Framework を使用しています。継承をモデル化するために、私のデータベースでは Table Per Type (別名 Class Table Inheritance) パターンを使用しています。Entity Framework は TPT 継承をサポートしています。ただし、速度は非常に遅いです。最も単純な linq クエリに対して非常に複雑な選択クエリを生成します。(この投稿を参照してください) データベースの継承の背景については、さまざまな種類の継承パターンに関する素敵な投稿があります。
別の方法として、私のデータベースでは、現在のオブジェクトの子の型を含む TPT パターンのバリエーションを使用しています。これは、この投稿の提案に従っています。結合する子テーブルがわかっているため、子のタイプを含めると、クエリがより簡単になります。
質問:次の TPT パターンを理解し、それに応じてより簡潔な選択クエリを実行するように Entity Framework に指示する方法はありますか? 次に、ORM からタイプ列を非表示にして、データベースにのみ表示することはできますか?
次の例を見てください。
親テーブル:
create table People
(
PersonID int primary key,
PersonTypeID int references PersonType(PersonTypeID),
Name varchar(10)
constraint People_AltPK unique (PersonID,PersonTypeID)
)
子テーブル:
create table Students
(
PersonID int primary key,
PersonTypeID as 1 persisted, -- student
EnrollmentDate datetime,
foreign key (PersonID, PersonTypeID) references People(PersonID, PersonTypeID)
)
create table Teachers
(
PersonID int primary key,
PersonTypeID as 2 persisted, -- teacher
HireDate datetime,
foreign key (PersonID, PersonTypeID) references People(PersonID, PersonTypeID)
)
create table Parents (
PersonID int primary key,
PersonTypeID as 3 persisted, -- parents
DifficultyScore int,
foreign key (PersonID, PersonTypeID) references People(PersonID, PersonTypeID)
)