EntitySet System.InvalidOperationException - „typ encji nie jest częścią modelu dla bieżącego kontekstu”

Podobne pytania

Jednostka typu <nazwa klasy> nie jest częścią modelu dla bieżącego kontekstu -i-EF 4.1 Kod Pierwszy błąd - typ jednostki SomeType nie jest częścią modelu dla bieżącego kontekstu są podobnymi pytaniami, ale są one tylko perspektywą „kodową”, ze znacznie prostszymi modelami danych i dotyczą ciągów połączeń i problemów z mapowaniem. Przyjrzyj się dokładnie temu.

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

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

    return View();
}

Wyjątek jest wyrzucany z odzyskiwaniemDrinks kolekcja:

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

Tak, wiem w prawdziwym świecie, że związek między mięsem i warzywami z posiłkami prawdopodobnie byłby wiele do wielu, ale nie daj się na tym zawiesić.

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

Moje doświadczenie polegało na stosowaniu metodologii Model First. Plik EDMX został zbudowany następnie POCO.

W łańcuchu połączenia znajduje się sekcja metadanych, która odwzorowuje przeanalizowane zasoby EDMX (metadata=res://*/Models.MealsModels.csdl|res://*/Models.MealsModels.ssdl|res://*/Models.MealsModels.msl;).

Zbadałem bazowy XML pliku EDMX, który pokazuje wszystkie elementy obecne w modelach koncepcyjnych i sklepowych, a wszystkie są w pełni zmapowane. WTF?

Rozwiązywanie problemów

Pierwszą próbą było całkowite pozbycie się sklepu i mapowanie danych EDMX (SSDL iMSL Sekcje). Odpalaj, a teraz są dwa wyjątki:

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

AportDrinks nadal rzucaThe entity type Drinkis not part of the model for the current context.

Błąd rzucony przezMeals oczekuje się, że pobiłem mapowania i model sklepu - badając_db pokazuje mi toMeals ->InternalSet ->EntitySet właściwość jest poprawna, tylko nie mapowana.

Błąd rzucony przezDrinks gdzie utknąłem. Badanie_db bliżej mi to pokazujeDrinks ->InternalSet ->EntitySet rzucaSystemInvalidOperation wyjątek, który stwierdza, że ​​jednostka nie znajduje się w kontekście modelu.

Oto jak wygląda CSDL EDMX w formacie 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>
Pytanie

JeśliDbContext ma wszystkoDbSet właściwości i zużywa ciąg połączenia, który zawiera metadane dla modelu, który CSDL poprawnie definiuje typ encjiDrink, dlaczego u diabła nie jest częścią kontekstu?

Jedyna rzecz innaDrink widzę, że nie jest powiązany z żadnymi innymi podmiotami i nie ma powiązań ...

questionAnswers(2)

yourAnswerToTheQuestion