1
我使用EF 6.1.1代碼先用.NET 4
和SQL Server 2008 R2
在我的項目不起作用戰略,並有以下類:自定義命名爲重點領域的TPT(表每型)EF
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
(表每類)繼承策略。 - 關鍵字段
OrderHeader
和OrderItem
表格爲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; }
}
但是當我運行該程序創建的表如下所示:
生成的密鑰列OrderHeader
和OrderItem
表是Id
,但在映射中我將它們定義爲DocumentId
。
是否有人知道問題在哪裏?
我需要'Id'在'BaseEntity',因爲我在我的項目中使用'BaseEntity'廣泛,並認爲它有'Id',不過我應用了你提到的改變,但沒有任何改變。 – Masoud 2014-10-14 04:03:11
奇怪的是,它在我的測試項目上運行良好... – ErikEJ 2014-10-14 06:52:45
你可以從我的測試項目https://www.dropbox.com/s/ud5oi13qa14p7bl/Inheritance.rar?dl=0 – Masoud 2014-10-14 07:53:04