エンティティ タイプのプロパティをデータベース内の複数のテーブルにマッピングする (エンティティ分割)と同時に、階層ごとのテーブル (TPH) 継承のマッピングを使用したいので、モデル マッピング コードは次のとおりです。
modelBuilder
.Entity<Person>()
.HasKey(n => n.PersonId)
.Map(map =>
{
map.Properties(p => new { p.Name });
map.ToTable("dbo.Person");
})
.Map<Customer>(map =>
{
map.Requires("PersonType").HasValue("C");
map.Properties(p => new { p.CustomerNumber });
map.ToTable("dbo.Customer");
});
次の基礎となるデータベース スキーマに基づきます。
create table dbo.Person
(
PersonId int not null identity(1,1) primary key,
PersonType char(1) not null,
Name varchar(50) not null
)
create table dbo.Customer
(
PersonId int not null references dbo.Person (PersonId),
CustomerNumber varchar(10) not null
)
ただし、EF がクエリを実行しようとすると:
ctx.People.ToList();
次の例外メッセージがスローされます。
Invalid column name 'PersonType'.
SQLプロファイルを実行すると、ディスクリミネーターが実際にあるテーブルではなく、テーブルのPersonType
値を持つフィールドで述語を使用しようとしているように見えます。C
dbo.Customer
dbo.Person
どちらか一方の機能、つまり継承のみまたは追加のテーブル マッピングのみを使用すると機能しますが、要件の一部が失われます。
私がやっていることは EF Fluent API で実行できますか?
御時間ありがとうございます。