我試圖用實體框架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