EntitySet System.InvalidOperationException - «тип сущности не является частью модели для текущего контекста»
Тип сущности <classname> не является частью модели для текущего контекста -а также-EF 4.1 Код Первая ошибка - тип объекта SomeType не является частью модели для текущего контекста являются похожими вопросами, но они представляют собой перспективу «сначала кода», с гораздо более простыми моделями данных, а также с проблемами строк подключения и сопоставления. Пожалуйста, внимательно посмотрите на это.
симптом// HomeController.cs
public ActionResult Index()
{
var _db = new MealsContext();
var m = _db.Meals.ToList();
var d = _db.Drinks.ToList();
return View();
}
Исключение выдается при полученииDrinks
коллекция:
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
а такжеMSL
секции). Пожар, и теперь есть два исключения:
ПолучениеMeals
бросаетMSL, error 2062 No mapping specified for instance of the EntitySet and AssociationSet in the EntityContainer
.
ПолучениеDrinks
продолжает бросатьThe entity type Drinkis not part of the model for the current context
.
Ошибка, брошеннаяMeals
Ожидается, я обстрелял сопоставления и модель магазина - изучая_db
показывает мне, чтоMeals
->InternalSet
->EntitySet
свойство верное, только не сопоставлено.
Ошибка, брошеннаяDrinks
это где я застрял. Изучение_db
ближе показывает мне, чтоDrinks
->InternalSet
->EntitySet
бросаетSystemInvalidOperation
исключение, в котором говорится, что объект не находится в контексте модели.
Вот как 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
имеет всеDbSet
свойства и использует строку подключения, которая включает метаданные для модели, которая CSDL правильно определяет тип объектаDrink
, почему, черт возьми, это не является частью контекста?
Единственное, что отличаетсяDrink
я вижу, что он не связан ни с какими другими объектами и не имеет ассоциаций ...