EntitySet System.InvalidOperationException - "Der Entitätstyp ist nicht Teil des Modells für den aktuellen Kontext."

Ähnliche Fragen

Der Entitätstyp <Klassenname> ist für den aktuellen Kontext nicht Teil des Modells -und-EF 4.1 Code First error - Der Entitätstyp SomeType ist nicht Teil des Modells für den aktuellen Kontext Bei diesen Fragen handelt es sich zwar um ähnliche Fragen, es handelt sich jedoch nur um eine Code-First-Perspektive mit viel einfacheren Datenmodellen und der Behebung von Verbindungszeichenfolgen und Mapping-Problemen. Bitte schauen Sie sich diese genau an.

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

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

    return View();
}

Ausnahme ist das Abrufen der geworfenDrinks Sammlung:

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

Ja, ich weiß, dass in der realen Welt die Beziehung zwischen Fleisch und Gemüse zu den Mahlzeiten wahrscheinlich viele-zu-viele sein wird, aber lassen Sie sich hier nicht hängen.

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

Meine Erfahrung bestand in der Verwendung einer Model First-Methodik. Die EDMX-Datei wurde dann mit den POCOs erstellt.

In der Verbindungszeichenfolge befindet sich der Metadatenabschnitt, der den analysierten EDMX-Ressourcen zugeordnet ist (metadata=res://*/Models.MealsModels.csdl|res://*/Models.MealsModels.ssdl|res://*/Models.MealsModels.msl;).

Ich habe das zugrunde liegende XML der EDMX-Datei untersucht und festgestellt, dass alle in Conceptual- und Store-Modellen vorhandenen Entitäten vollständig zugeordnet sind. WTF?

Fehlerbehebung

Der erste Versuch bestand darin, den Speicher vollständig zu entfernen und die EDMX - Daten (dieSSDL undMSL Abschnitte). Feuer weg, und jetzt gibt es zwei Ausnahmen:

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

AbrufenDrinks wirft weiterThe entity type Drinkis not part of the model for the current context.

Der Fehler von geworfenMeals Es wird erwartet, dass ich die Zuordnungen und das Geschäftsmodell auf den Prüfstand gestellt habe_db zeigt mir dasMeals ->InternalSet ->EntitySet Eigenschaft ist korrekt, nur nicht zugeordnet.

Der Fehler von geworfenDrinks Hier stecke ich fest. Untersuchen_db näher zeigt mir dasDrinks ->InternalSet ->EntitySet wirft dieSystemInvalidOperation Ausnahme, die besagt, dass sich die Entität nicht im Modellkontext befindet.

So sieht die CSDL von EDMX im XML-Format aus:

<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>
Frage

Wenn dasDbContext hat allesDbSet Eigenschaften und verwendet eine Verbindungszeichenfolge, die Metadaten für ein Modell enthält, dessen CSDL den Entitätstyp korrekt definiertDrink, warum zum Teufel ist es nicht Teil des Kontexts?

Das einzige, was anders istDrink Ich kann sehen, dass es mit keiner anderen Entität verwandt ist und keine Assoziationen hat ...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage