C# 关键字段的自定义命名在EF的TPT(每种类型的表)策略中不起作用

C# 关键字段的自定义命名在EF的TPT(每种类型的表)策略中不起作用,c#,entity-framework,inheritance,ef-code-first,table-per-type,C#,Entity Framework,Inheritance,Ef Code First,Table Per Type,我首先将EF 6.1.1代码用于.NET 4和SQL Server 2008 R2,在我的项目中有以下几个类: public abstract class BaseEntity { public int Id { get; set; } } public class Document : BaseEntity { public string Number { get; set; } } public class OrderHeader : Document { pub

我首先将EF 6.1.1代码用于
.NET 4
SQL Server 2008 R2
,在我的项目中有以下几个类:

public abstract class BaseEntity
{
    public int Id { get; set; }
}

public class Document : BaseEntity
{
    public string Number { get; set; }
}

public class OrderHeader : Document
{
    public OrderHeader()
    {
        this.OrderItems = new List<OrderItem>();
    }
    public ICollection<OrderItem> OrderItems { get; set; }
}

public class OrderItem : Document
{
    public int OrderHeaderId { get; set; }
    public virtual OrderHeader OrderHeader { get; set; }
}

使用它们的是我的
DbContext
文件:

public class MyDbContext:DbContext
{
    public MyDbContext()
        : base("name=MyContext")
    {

       Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Configurations.Add(new Document_Mapping());
        modelBuilder.Configurations.Add(new OrderHeader_Mapping());
        modelBuilder.Configurations.Add(new OrderItem_Mapping());
    }
    public DbSet<OrderItem> OrderItems { get; set; }
    public DbSet<OrderHeader> OrderHeaders { get; set; }
}
公共类MyDbContext:DbContext
{
公共MyDbContext()
:base(“name=MyContext”)
{
SetInitializer(新的DropCreateDatabaseAlways());
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(新文档映射());
modelBuilder.Configurations.Add(neworderheader_Mapping());
modelBuilder.Configurations.Add(neworderItem_Mapping());
}
公共数据库集OrderItems{get;set;}
公共DbSet OrderHeaders{get;set;}
}
但当我运行程序时,创建的表如下所示:

OrderHeader
OrderItem
表生成的键列是
Id
,但在映射中我将它们定义为
DocumentId


有人知道问题出在哪里吗?

更新到EF 6.1.2-beta1或更高版本


这是一个bug,在这里被修复了:

我需要
Id
BaseEntity
中,因为我在我的项目中广泛使用
BaseEntity
,并且假设它有
Id
,但是我应用了你提到的更改,但没有任何更改。你可以从EF
6.1.2-beta2
获得我的测试项目吗?我无法获得它。您可以从几乎所有的构建中获得它,但是6.1.2-beta1现在也应该有修复程序,使用
EF 6.1.2-beta1
,即使我使用
BaseEntity
。请更新您的答案,无需删除
BaseEntity
。谢谢你的帮助
public class MyDbContext:DbContext
{
    public MyDbContext()
        : base("name=MyContext")
    {

       Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Configurations.Add(new Document_Mapping());
        modelBuilder.Configurations.Add(new OrderHeader_Mapping());
        modelBuilder.Configurations.Add(new OrderItem_Mapping());
    }
    public DbSet<OrderItem> OrderItems { get; set; }
    public DbSet<OrderHeader> OrderHeaders { get; set; }
}