2013-04-26 2 views
1

Я пытаюсь реализовать шаблон состояния с Entity Framework 5 Code First.Entity Framework - Наследование - шаблон состояния - ошибка: «Тип не был отображен»

Мой сценарий есть абстрактный частичный базовый класс с именем LotStatus и 5 класс, который наследует от этого один: OpenStatus, AwardedStatus, CancelledStatus, ContractSignedStatus и EvaluationStatus:

public abstract partial class LotStatus { ... } 

    public class OpenStatus : LotStatus { ... } 
    public class AwardedStatus : LotStatus { ... } 

В OnModelCreating из DbContext я добавляю конфигурация для модели строителя Карта эти объекты:

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] тег так, что я worng делать? Некоторая идея?

Спасибо!

ответ

1

Решено!

У меня есть другой шаблон статуса, определенный в этом проекте. Проблема заключалась в том, что в другом реализованном шаблоне состояния существует еще один класс OpenStatus, который наследуется от другого абстрактного класса (ProcedureStatus).

Core.ProcedureAggregate.OpenStatus : ProcedureStatus 
Core.LotAggregate.OpenStatus : LotStatus 

Я изменил имя статуса OpenLotStatus и он работал ...

Core.ProcedureAggregate.OpenStatus : ProcedureStatus 
Core.LotAggregate.OpenLotStatus : LotStatus 

Похоже, что это не возможно иметь два класса с тем же именем, хотя они были определены в разных пространствах имен .. .

Спасибо за все :)

0

Похоже, вы забыли включить свои объекты в DbContext - например.

public DbSet<LotStatus> LotStatuses { get; set; } 

Смотрите этот для некоторых более подробной информации Entity Not Mapped - Entity Model Framework

+0

Он был включен: общественный DbSet LotStatus {получить; задавать; } –

+0

затем поместите полный воспроизводимый код для сущностей и вашего контекста, и я попробую взглянуть позже – NSGaga

Смежные вопросы