わかりました、おそらくこの質問は以前に回答されていますが、私は調査しており、特定の問題の解決策を見つけることができません
このサンプルのコード - Visual Studio 2012 - コンソール アプリ
したがって、複数の継承オブジェクトを持つ EntityFramework Code First モデルがあります。私の問題を表すこの例を作成しました:
モデル
public abstract class Person
{
[Key]
public Guid PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Employee : Person
{
public decimal BaseSalary { get; set; }
}
public class ExecutiveEmployee : Employee
{
public string Title { get; set; }
}
環境
public class MyContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<ExecutiveEmployee> ExecutiveEmployees { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Employee>().Map(x =>
{
x.MapInheritedProperties();
x.ToTable("Employees");
});
modelBuilder.Entity<ExecutiveEmployee>().Map(x =>
{
x.MapInheritedProperties();
x.ToTable("ExecutiveEmployees");
});
}
}
TPC (Table Per Concrete Type) マッピングを使用したい
移行を実行してデータベースを更新した後の結果は次のとおりです。
これは私の期待でした。ここまでは順調ですね。
しかし、その後.......Gender
私は次のようにオブジェクトとプロパティをクラスに追加することにしましたPerson
:(これは私の実際のモデルではなく、単なる例です)
public class Gender
{
[Key]
public Guid GenderId { get; set; }
[Required]
[MaxLength(250)]
public string Name { get; set; }
}
public abstract class Person
{
....
public Gender Gender { get; set; }
....
}
public class MyContext : DbContext
{
....
public DbSet<Gender> Genders { get; set; }
....
}
移行を適用してデータベースを更新した後のデータベース モデルは次のとおりです。
なぜYYYYYYYY?
私は何が欠けていますか?EF が参照プロパティを継承階層にマップするようにしたいだけです。私は、テーブルに正確に外部ExecutiveEmployees
キーが含まれていることを期待していますGenders
Employees
Genders
私は自分でこれを試しましたMyContext.OnModelCreating
:
modelBuilder.Entity<ExecutiveEmployee>().Map(x =>
{
x.MapInheritedProperties();
x.Properties(c => c.Gender);// <<-- does not work
x.ToTable("ExecutiveEmployees");
});
しかし、移行を追加しようとすると、次のエラーが表示されます。
タイプ 'ExecutiveEmployee' のプロパティ 'Gender' は、モデルから明示的に除外されているか、使用されている DbModelBuilderVersion でサポートされていないタイプであるため、マップできません。