EntitySet System.InvalidOperationException: "el tipo de entidad no es parte del modelo para el contexto actual"

Preguntas similares

El tipo de entidad <nombre_clase> no forma parte del modelo para el contexto actual -y-Código de EF 4.1 Primer error: el tipo de entidad SomeType no forma parte del modelo para el contexto actual son preguntas similares pero son solo la perspectiva de "código primero", con modelos de datos mucho más simples y que abordan los problemas de asignación y cadena de conexión. Por favor, mira de cerca este.

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

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

    return View();
}

Se lanza una excepción recuperando elDrinks colección:

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; }
}

Sí, sé que en el mundo real la relación entre la carne y los vegetales con las comidas probablemente sería de muchos a muchos, pero no se obsesione con esto aquí.

// 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; }
}

Mi experiencia fue en el uso de una metodología Model First. El archivo EDMX fue construido entonces los POCOs.

En la cadena de conexión se encuentra la sección de metadatos que se asigna a los recursos EDMX analizados (metadata=res://*/Models.MealsModels.csdl|res://*/Models.MealsModels.ssdl|res://*/Models.MealsModels.msl;).

Examiné el XML subyacente del archivo EDMX que muestra todas las entidades presentes en los modelos Conceptual y Store, y todas están completamente mapeadas. WTF?

Solución de problemas

El primer intento fue deshacerse completamente de la tienda y mapear los datos EDMX (elSSDL yMSL secciones). Dispara, y ahora hay dos excepciones:

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

RecuperandoDrinks sigue tirandoThe entity type Drinkis not part of the model for the current context.

El error lanzado porMeals es esperado, nuké las asignaciones y el modelo de tienda - examinando_db me muestra queMeals ->InternalSet ->EntitySet La propiedad es correcta, simplemente no asignada.

El error lanzado porDrinks es donde estoy atascado. Examinando_db más cerca me muestra queDrinks ->InternalSet ->EntitySet arroja elSystemInvalidOperation excepción que indica que la entidad no está en el contexto modelo.

Así es como se ve el CSDL de EDMX en 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>
Pregunta

Si elDbContext tiene todo elDbSet propiedades y consume una cadena de conexión que incluye metadatos para un modelo cuyo CSDL define correctamente el tipo de entidadDrink, ¿Por qué demonios no es parte del contexto?

Lo único diferente deDrink lo que puedo ver es que no está relacionado con ninguna otra entidad, y no tiene asociaciones ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta