次のドメイン モデルがある場合:
public class Test
{
public string Description { get; set; }
public TestB A { get; set; }
public TestB B { get; set; }
public TestB C { get; set; }
}
public class TestB
{
public string Name { get; set; }
public string Description { get; set; }
}
そして、次の構造を持つテーブルがあります。
Test
- Description
- NameA
- DescriptionA
- NameB
- DescriptionB
- NameC
- DescriptionC
名前と説明のペアは、複合型 B の個々のインスタンスにマップされます。
データベース スキーマを変更できないと仮定して、流暢な API を純粋に使用してこのマッピングを定義する方法はありますか?
これを合理的な方法で機能させる唯一の方法は、TestB のサブタイプを派生させ、次のようにマップすることです。
modelBuilder.ComplexType<TestB>().Property(x => x.Name).HasColumnName("NameA");
modelBuilder.ComplexType<TestB>().Property(x => x.Description).HasColumnName("DescriptionA");
modelBuilder.ComplexType<TestB1>().Property(x => x.Name).HasColumnName("NameB");
modelBuilder.ComplexType<TestB1>().Property(x => x.Description).HasColumnName("DescriptionB");
エンティティ フレームワークへのマッピングのためだけに派生型を定義する必要はありません。