Entity Framework 5 Code First でステータス パターンを実装しようとしています。
私のシナリオには、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] タグがないので、何をしているの? アイデア?
ありがとう!