EntitySet System.InvalidOperationException - «тип сущности не является частью модели для текущего контекста»

Подобные вопросы

Тип сущности <classname> не является частью модели для текущего контекста&nbsp;-а также-EF 4.1 Код Первая ошибка - тип объекта SomeType не является частью модели для текущего контекста&nbsp;являются похожими вопросами, но они представляют собой перспективу «сначала кода», с гораздо более простыми моделями данных, а также с проблемами строк подключения и сопоставления. Пожалуйста, внимательно посмотрите на это.

симптом
// HomeController.cs
public ActionResult Index()
{
    var _db = new MealsContext();

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

    return View();
}

Исключение выдается при полученииDrinks&nbsp;коллекция:

The entity type Drink is not part of the model for the current context.
Код
// 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; }
}

Да, я знаю, что в реальном мире отношения между мясом и овощами с едой, вероятно, были бы «многие ко многим», но не зацикливайтесь на этом здесь.

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

Мой опыт был в использовании методологии Model First. Файл EDMX был построен тогда POCOs.

В строке подключения находится раздел метаданных, который отображается на проанализированные ресурсы EDMX (metadata=res://*/Models.MealsModels.csdl|res://*/Models.MealsModels.ssdl|res://*/Models.MealsModels.msl;).

Я изучил базовый XML-файл EDMX, в котором показаны все объекты, присутствующие в моделях Conceptual и Store, и все они полностью сопоставлены. WTF?

Поиск неисправностей

Первой попыткой было полностью избавиться от хранилища и отображения данных EDMX (SSDL&nbsp;а такжеMSL&nbsp;секции). Пожар, и теперь есть два исключения:

ПолучениеMeals&nbsp;бросаетMSL, error 2062 No mapping specified for instance of the EntitySet and AssociationSet in the EntityContainer.

ПолучениеDrinks&nbsp;продолжает бросатьThe entity type Drinkis not part of the model for the current context.

Ошибка, брошеннаяMeals&nbsp;Ожидается, я обстрелял сопоставления и модель магазина - изучая_db&nbsp;показывает мне, чтоMeals&nbsp;->InternalSet&nbsp;->EntitySet&nbsp;свойство верное, только не сопоставлено.

Ошибка, брошеннаяDrinks&nbsp;это где я застрял. Изучение_db&nbsp;ближе показывает мне, чтоDrinks&nbsp;->InternalSet&nbsp;->EntitySet&nbsp;бросаетSystemInvalidOperation&nbsp;исключение, в котором говорится, что объект не находится в контексте модели.

Вот как CSDL EDMX выглядит в формате 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>
Вопрос

ЕслиDbContext&nbsp;имеет всеDbSet&nbsp;свойства и использует строку подключения, которая включает метаданные для модели, которая CSDL правильно определяет тип объектаDrink, почему, черт возьми, это не является частью контекста?

Единственное, что отличаетсяDrink&nbsp;я вижу, что он не связан ни с какими другими объектами и не имеет ассоциаций ...