次のようなデータを含むレガシー データベース (変更できない) に 2 つのテーブルがあります。
Table1 には複合主キー (Code、Abbrev) がありますが、Abbrev は識別子としても使用されます (以下を参照)。Table2 には 2 つの外部キー列 (CodeA、CodeB) があり、どちらも Table1 の同じフィールド Code を参照しています。Table1.Code フィールドに重複があります。
Entity Framework 6 で table-per-hierarchy アプローチを使用したいので、次のモデル クラスを作成しました。
[Table("Table1")]
public class MyBaseClass
{
[Key]
public string Code { get; set; }
}
public class MyBaseClassA : MyBaseClass
{
}
public class MyBaseClassB: MyBaseClass
{
}
[Table("Table2")]
public class SubClass
{
[Key]
public int Id { get; set; }
[Required]
[ForeignKey("MyBaseClassA")]
public string CodeA { get; set; }
public virtual MyBaseClassA ClassA { get; set; }
[Required]
[ForeignKey("MyBaseClassB")]
public string CodeA { get; set; }
public virtual MyBaseClassB ClassB { get; set; }
}
次のように、 DataContext : DbContext クラスで table-per-hierarchy を定義しました。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyBaseClass>().Map<MyBaseClassA>(m => m.Requires("Abbrev").HasValue("A"))
.Map<MyBaseClassB>(m => m.Requires("Abbrev").HasValue("B"));
}
問題は、そのようなマッピングを使用したい場合です - MyBaseClass の複合キーの一部として識別子フィールド (Table1.Abbrev) を使用できません - 次のエラーが発生します:
EntitySet 'DataContext.MyBaseClass' 内のすべてのオブジェクトには、一意の主キーが必要です。ただし、タイプ 'MyBaseClassA' のインスタンスとタイプ 'MyBaseClassB' のインスタンスはどちらも同じ主キー値 'EntitySet=MyBaseClass;Code=1' を持っています。
上記のモデルを Entity Framework 6 (またはそれ以降) にマップすることは可能ですか?