EntitySet System.InvalidOperationException - "Der Entitätstyp ist nicht Teil des Modells für den aktuellen Kontext."
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?
FehlerbehebungDer 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>
FrageWenn 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 ...