EF4 Code仅映射inheritance

我有以下模型,我希望ShiftRequestMissionRequest在数据库中有一个表。

  public class RequestBase { public int Id { get; set; } public DateTime? RequestDate { get; set; } public int UserId { get; set; } public virtual ICollection Notifications { get; set; } } public class ShiftRequest : RequestBase { public virtual Column Column { get; set; } } public class MissionRequest : RequestBase { public virtual Mission Mission { get; set; } } 

我试图在override void OnModelCreating(ModelBuilder modelBuilder)方法中创建它,但只创建了一个RequestBases表:

 modelBuilder.Entity().MapSingleType().ToTable("dbo.ShiftRequests"); modelBuilder.Entity().MapSingleType().ToTable("dbo.MissionRequest"); 

我究竟做错了什么?

编辑

ColumnMission也是我模型中的实体,是否可以接受?

请查看本文中有关TPH的部分。 如果Mission和Column是复杂类型,您还可以在那里找到如何映射它们。 通常,您必须使用MapHiearchy和Case方法而不是MapSingleType。

编辑:

这是一个例子:

 using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.ModelConfiguration; namespace EFTest { public class RequestBase { public int Id { get; set; } public DateTime? RequestedDate { get; set; } public int UserId { get; set; } } public class Mission { public int Id { get; set; } public string Name { get; set; } public virtual ICollection MissionRequests { get; set; } } public class Column { public string Name { get; set; } } public class MissionRequest : RequestBase { public virtual Mission Mission { get; set; } } public class ShiftRequest : RequestBase { public Column Column { get; set; } } public class TestContext : DbContext { public DbSet Requests { get; set; } public DbSet Missions { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ContainerName = "EFTest"; modelBuilder.IncludeMetadataInDatabase = false; // Example of complex type mapping. First you have to define // complex type. Than you can access type properties in // MapHiearchy. var columnType = modelBuilder.ComplexType(); columnType.Property(c => c.Name).HasMaxLength(50); modelBuilder.Entity() .Property(m => m.Id) .IsIdentity(); modelBuilder.Entity() .HasKey(m => m.Id) .MapSingleType(m => new { m.Id, m.Name }) .ToTable("dbo.Missions"); modelBuilder.Entity() .Property(r => r.Id) .IsIdentity(); // You map multiple entities to single table. You have to // add some discriminator to differ entity type in the table. modelBuilder.Entity() .HasKey(r => r.Id) .MapHierarchy() .Case(r => new { r.Id, r.RequestedDate, r.UserId, Discriminator = 0 }) .Case(m => new { MissionId = m.Mission.Id, Discriminator = 1 }) .Case(s => new { ColumnName = s.Column.Name, Discriminator = 2 }) .ToTable("dbo.Requests"); } } } 

编辑2:

我更新了例子。 现在Mission是实体而不是复杂类型。