1

我使用EF 6.1.1代碼先用.NET 4SQL Server 2008 R2在我的項目不起作用戰略,並有以下類:自定義命名爲重點領域的TPT(表每型)EF

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

是否有人知道問題在哪裏?

回答

2

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

這是一個錯誤,這是固定在這裏:https://entityframework.codeplex.com/workitem/2087

+0

我需要'Id'在'BaseEntity',因爲我在我的項目中使用'BaseEntity'廣泛,並認爲它有'Id',不過我應用了你提到的改變,但沒有任何改變。 – Masoud 2014-10-14 04:03:11

+0

奇怪的是,它在我的測試項目上運行良好... – ErikEJ 2014-10-14 06:52:45

+0

你可以從我的測試項目https://www.dropbox.com/s/ud5oi13qa14p7bl/Inheritance.rar?dl=0 – Masoud 2014-10-14 07:53:04