我试图用实体框架5代码优先来实现状态模式。实体框架 - 继承 - 状态模式 - 错误:“类型未映射”
我的情况下有一个名为LotStatus一个抽象的部分基类,5类,从这个继承:OpenStatus,AwardedStatus,CancelledStatus,ContractSignedStatus和EvaluationStatus:
public abstract partial class LotStatus { ... }
public class OpenStatus : LotStatus { ... }
public class AwardedStatus : LotStatus { ... }
从的DbContext的OnModelCreating我添加一个配置模型构建器,以地图这些实体:
modelBuilder.Configurations.Add(new LotStatusConfiguration());
LotStatusConfiguration的代码如下:
public class LotStatusConfiguration : EntityTypeConfiguration<LotStatus>
{
public LotStatusConfiguration()
{
ToTable("LotStatus");
HasKey(ls => ls.LotStatusID);
this.Map<OpenStatus>(pk => pk.Requires("Discriminator").HasValue(typeof(OpenStatus).AssemblyQualifiedName).HasColumnType("nvarchar(max)"));
this.Map<EvaluationStatus>(pk => pk.Requires("Discriminator").HasValue(typeof(EvaluationStatus).AssemblyQualifiedName).HasColumnType("nvarchar(max)"));
this.Map<AwardedStatus>(pk => pk.Requires("Discriminator").HasValue(typeof(AwardedStatus).AssemblyQualifiedName).HasColumnType("nvarchar(max)"));
this.Map<ContractSignedStatus>(pk => pk.Requires("Discriminator").HasValue(typeof(ContractSignedStatus).AssemblyQualifiedName).HasColumnType("nvarchar(max)"));
this.Map<CancelledStatus>(pk => pk.Requires("Discriminator").HasValue(typeof(CancelledStatus).AssemblyQualifiedName).HasColumnType("nvarchar(max)"));
}
}
当EF试图创建它提出了一个错误的数据库:
The type 'OpenStatus' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from EntityObject.
我没有任何[NotMapped]标记,这样,我在做什么拨错?一些想法?
谢谢!
它包括:公共DbSet LotStatus {获得;组; } –
2013-04-26 12:57:08
然后为实体和您的上下文放置一个完全可重复的代码,稍后我会试着看看它 – NSGaga 2013-04-26 12:59:41