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

时间:2014-10-06 05:39:54

标签: c# entity-framework inheritance ef-code-first table-per-type

我首先在.NET 4SQL Server 2008 R2使用EF 6.1.1代码,并在我的项目中使用以下类:

enter image description here

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; }
}

我想

  • 使用TPT(每种类型的表)继承策略。
  • OrderHeaderOrderItem表格的关键字段为DocumentId

所以我定义了以下映射文件:

public class Document_Mapping : EntityTypeConfiguration<Document>
{
   public Document_Mapping()
   {
        ToTable("Document");
   }
}

public class OrderHeader_Mapping : EntityTypeConfiguration<OrderHeader>
{
    public OrderHeader_Mapping()
    {
        ToTable("OrderHeader");
        Property(t => t.Id).HasColumnName("DocumentId");
    }
}

public class OrderItem_Mapping : EntityTypeConfiguration<OrderItem>
{
    public OrderItem_Mapping()
    {
        ToTable("OrderItem");
        Property(t => t.Id).HasColumnName("DocumentId");
        HasRequired(t => t.OrderHeader)
       .WithMany(t => t.OrderItems)
       .HasForeignKey(d => d.OrderHeaderId);
    }
}

使用它们是我的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; }
}

但是当我运行程序时,创建的表看起来像: enter image description here

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

有人知道问题在哪里吗?

1 个答案:

答案 0 :(得分:2)

更新至EF 6.1.2-beta1或更高版本。

这是一个错误,已修复此问题:https://entityframework.codeplex.com/workitem/2087