对于某些实体,我有一个使用表类型继承的简单模型。问题是当我使用 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 进行测试,结果相同。