EntitySet System.InvalidOperationException - “o tipo de entidade não faz parte do modelo para o contexto atual”

Perguntas semelhantes

O tipo de entidade <classname> não faz parte do modelo para o contexto atual -e-Código EF 4.1 Primeiro erro - O tipo de entidade SomeType não faz parte do modelo para o contexto atual são questões semelhantes, mas são apenas uma perspectiva de "código primeiro", com modelos de dados muito mais simples, e abordam problemas de cadeia de conexão e mapeamento. Por favor, olhe atentamente para este.

Sintoma
// HomeController.cs
public ActionResult Index()
{
    var _db = new MealsContext();

    var m = _db.Meals.ToList();
    var d = _db.Drinks.ToList();

    return View();
}

Exceção é lançada recuperando oDrinks coleção:

The entity type Drink is not part of the model for the current context.
Código
// Meal.cs
public class Meal
{
    public int Id { get; set; }
    public string Stuff { get; set; }
    public virtual ICollection<Meat> Meats { get; set; }
    public virtual ICollection<Vegetable> Vegetables { get; set; }
}

// Meat.cs
public class Meat
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int MealId { get; set; }
}

// Vegetable.cs
public class Vegetable 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int MealId { get; set; }
}

// Drink.cs
public class Drink
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Sim, eu sei que no mundo real a relação entre carne e vegetais com refeições provavelmente seria muitos-para-muitos, mas não fique preso a isso aqui.

// MealsContext.cs
public class MealsContext: DbContext
{               
    public MealsContext() : base("ConnectionString")

    public DbSet<Meal> Meals{ get; set; }
    public DbSet<Meat> Meats{ get; set; }
    public DbSet<Vegetable> Vegetables { get; set; }
    public DbSet<Drink> Drinks{ get; set; }
}

Minha experiência foi no uso de uma metodologia Model First. O arquivo EDMX foi construído em seguida, os POCOs.

Na cadeia de conexão, está a seção de metadados que mapeia para os recursos EDMX analisados ​​(metadata=res://*/Models.MealsModels.csdl|res://*/Models.MealsModels.ssdl|res://*/Models.MealsModels.msl;).

Eu examinei o XML subjacente do arquivo EDMX mostra todas as entidades presentes em modelos conceituais e de armazenamento, e todos são totalmente mapeados. WTF

Solução de problemas

A primeira tentativa foi livrar-se completamente da loja e mapear os dados da EDMXSSDL eMSL Seções). Dispare, e agora existem duas exceções:

RecuperandoMeals lançaMSL, error 2062 No mapping specified for instance of the EntitySet and AssociationSet in the EntityContainer.

RecuperandoDrinks continua a jogarThe entity type Drinkis not part of the model for the current context.

O erro lançado porMeals é esperado, eu nuked os mapeamentos e modelo de loja - examinando_db me mostra issoMeals ->InternalSet ->EntitySet a propriedade está correta, apenas não mapeada.

O erro lançado porDrinks é onde estou preso. Examinando_db mais perto me mostra queDrinks ->InternalSet ->EntitySet lança oSystemInvalidOperation exceção que indica que a entidade não está no contexto do modelo.

Aqui está o que parece o CSDL do EDMX no formato XML:

<edmx:ConceptualModels>
  <Schema ...>
    <EntityContainer Name="MealsContext" annotation:LazyLoadingEnabled="true">
      <EntitySet Name="Meals" EntityType="Models.Meal" />
      <EntitySet Name="Meats" EntityType="Models.Meat" />
      <EntitySet Name="Vegetables" EntityType="Models.Vegetable" />
      <EntitySet Name="Drinks" EntityType="Models.Drink" />
      <!-- AssociationSets here for the FKs -->
    </EntityContainer>
    <!-- All are present, but here's the culprit Drink -->
    <EntityType Name="Drink">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
      <Property Type="String" Name="Name" Nullable="false" MaxLength="200" FixedLength="false" Unicode="true" />
    </EntityType>
    <!-- Associations here -->
  </Schema>
</edmx:ConceptualModels>
Questão

Se oDbContext tem todo oDbSet propriedades e está consumindo uma cadeia de conexão que inclui metadados para um modelo que define CSDL corretamente o tipo de entidadeDrink, Por que diabos isso não faz parte do contexto?

A única coisa diferente sobreDrink que eu posso ver é que não está relacionado a nenhuma outra entidade e não tem associações ...

questionAnswers(2)

yourAnswerToTheQuestion