いくつかのエンティティに対して型継承ごとのテーブルを使用する単純なモデルがあります。問題は、Add-Migration を使用して移行を生成すると、子クラスの主キーに重複したインデックスが作成されることです。
クラス定義:
class Product
{
[Key]
public int ProductId { get; set; }
public int Value { get; set; }
}
class Service : Product
{
public int OtherValue { get; set; }
}
私のコンテキストでは、両方のクラスのテーブル名を指定します
class ProductContext : DbContext
{
virtual public DbSet<Product> ProductSet { get; set; }
virtual public DbSet<Service> ServiceSet { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().ToTable("Product");
modelBuilder.Entity<Service>().ToTable("Service");
}
}
Add-Migration を実行すると、次のようになります。
public override void Up()
{
CreateTable(
"dbo.Product",
c => new
{
ProductId = c.Int(nullable: false, identity: true),
Value = c.Int(nullable: false),
})
.PrimaryKey(t => t.ProductId);
CreateTable(
"dbo.Service",
c => new
{
ProductId = c.Int(nullable: false),
OtherValue = c.Int(nullable: false),
})
.PrimaryKey(t => t.ProductId)
.ForeignKey("dbo.Product", t => t.ProductId)
.Index(t => t.ProductId);
}
Service.ProductId が既に主キーになっている場合は、追加のインデックスを作成します。インデックスが追加されないようにするために欠落している注釈はありますか?
EF5 と EF6 の両方でテストされ、同じ結果が得られました。