2

データベースの 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)
)
4

0 に答える 0