我首先在.NET 4
和SQL Server 2008 R2
使用EF 6.1.1代码,并在我的项目中使用以下类:
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
。
有人知道问题在哪里吗?
答案 0 :(得分:2)
更新至EF 6.1.2-beta1或更高版本。
这是一个错误,已修复此问题:https://entityframework.codeplex.com/workitem/2087