wake-up-neo.net

EF 4.1 Code Erster Fehler - Der Entitätstyp SomeType ist nicht Teil des Modells für den aktuellen Kontext

Beim ersten Arbeiten mit EF-Code wird zu verschiedenen Zeitpunkten eine Fehlermeldung angezeigt:

Der Entitätstyp SomeType ist nicht Teil des Modells für den aktuellen Kontext.

Was sind die möglichen Ursachen für diesen Fehler?

42
rovsen

Es kann vorkommen, weil: 

  • DbContext wurde mit einer falschen Verbindungszeichenfolge konfiguriert 
  • Die angegebene Entität wird in der Konfiguration tatsächlich nicht zugeordnet
40
rovsen

Ich bekam dies, als meine Klasse, die von DbContext geerbt wurde, das Modell nicht als Eigenschaft deklarierte. Beispielsweise habe ich es versäumt, im folgenden Code eine Eigenschaft für FooModel hinzuzufügen:

public class MyDBContext : DbContext
{
    public DbSet<FooModel> FooModels{ get; set; }

    // etc. ... 
}
14
GraehamF

Diese Meldung wird auch angezeigt, wenn Sie versuchen, einen solchen EntityState für eine untergeordnete Sammlung in einer Eins-zu-Viele-Zuordnung festzulegen. 

Zum Beispiel; Wenn zwischen ParentEnt und ChildEnt eine Eins-zu-Viele-Verknüpfung im nachstehenden Codeausschnitt vorhanden ist, wird die Fehlermeldung angezeigt:

Der Entitätstyp Hash1Type ist nicht Teil des Modells für den aktuellen Kontext.

MyDbContext.Entry(ParentEnt.ChildEnt).State = EntityState.Unchanged;

Die folgende Änderung führt nicht zu einem Fehler:

MyDbContext.Entry(ParentEnd.ChildEnt.First).State = EntityState.Unchanged;

Beachten Sie, dass die Verwendung von First() in diesem Fall möglicherweise t anzeigt

5
Doug Kimzey

Dies kann passieren, wenn Ihr Modell Ihrer Klasse nicht korrekt zugeordnet ist. In meinem Fall habe ich diese Fehlermeldung erhalten, als ich EF Model First verwendet habe und mein EDMX-Modell von der DB aus aktualisiert habe, aber meine Entity-Klasse nicht aktualisiert habe. Eine Eigenschaft in Entity war in Kleinbuchstaben, während in DB und EDMX das Diagramm in Großbuchstaben war. .__ Ein anderes Problem, das ich hatte, war, dass eine Modelleigenschaft im EDMX-Diagramm nicht in meine App Enum konvertiert wurde. Daher konnte EF diese Entität nicht erkennen.

1
Amir Chatrbahr

Dies kann auch durch Eigenschaften in Ihrem POCO verursacht werden, die nicht EXACTLY genannt werden, da sie im EDMX/Modelbuilder vorhanden sind. In meinem Beitrag hier erfahren Sie, wie ich Probleme mit dem Problem habe.

Der Entitätstyp <class> ist nicht Teil des Modells für den aktuellen Kontext.

1
Aaron Bar

Ich hatte diesen Fehler.

Es stellte sich heraus, dass ich einige Stunden zuvor ein neues Feld zu einer Datenbankansicht hinzugefügt hatte. Ich habe den Kontext aktualisiert (als Teil von etwas anderem) und diesen Fehler erhalten.

Als ich die POCOs aktualisiert habe, war alles gut: EF hat diesen Fehler ausgegeben, weil er ein Feld in der View nicht einer Eigenschaft im POCO der View zuordnen konnte. 

Nicht die hilfreichste Fehlermeldung in dieser Situation, IMO.

1
Neil Thompson

In meinem Szenario verwendete ich EF6, um eine MySQL-Datenbank zu MSSQL zu migrieren. Ich hatte zwei verschiedene Modelle und Kontexte, jedes mit einer eigenen Verbindungszeichenfolge. Die Klassen hatten den gleichen Namen, aber der MySQL-Kurs war nur aus Kleinbuchstaben und der MSSQL-Code aus einem Pascal-Gehäuse. Ich hatte beide Verbindungszeichenfolgen aus den relevanten Baugruppen kopiert, die meine EDMX-Modelle enthalten. Als ich meine Anwendung ausführte, bekam ich eine Fehlermeldung, dass eine der beiden Verbindungszeichenfolgen der Wörterbuchliste bereits hinzugefügt wurde.

Also entfernte ich den widersprüchlichen Eintrag. Ich dachte dummerweise, er hätte irgendwie Zugriff auf die Verbindungszeichenfolge in der eigenen app.config der Assembly (es ist spät!). Aber nein, der Fehler trat tatsächlich auf, weil beide Verbindungszeichenfolgen denselben Namen hatten - eine ganz aus Kleinbuchstaben und eine in Pascal-Hülle -, d. H. Der Dictionary-Schlüssel ignoriert die Hülle. Als ich das MySQL-Modul entfernte, versuchte es dann, die MSSQL-Verbindungszeichenfolge für BEIDE Modelle zu verwenden. Also musste ich die Verbindungszeichenfolge für das zweite Modell im Code erneut hinzufügen, umbenennen und manuell festlegen.

0
Breeno

UPDATE

Dieser Fehler attackierte mich ständig mit verschiedenen Aktualisierungen, die ich an der Datenbank vorgenommen hatte. Irgendwann habe ich die edmx-Datei gelöscht und sie einfach mit den gleichen Tabellen und gespeicherten Prozeduren neu erstellt.

Alt

Ich habe dies erhalten, als der generierten Entität eine Spalte mit Nullwert fehlte:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace MyProgram.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Question
    {
        public int id { get; set; }
        public string title { get; set; }
        public string body { get; set; }
        public string tags { get; set; }
        public int votes { get; set; }//I had to manually add this property which is nullable int in the database
    }
}

Ich habe die Eigenschaft hinzugefügt, nachdem das ursprüngliche Modell generiert wurde. Ich habe jedoch sogar versucht, die Tabelle zu löschen und neu zu erstellen. Das hat es nicht behoben. Nur das Hinzufügen der Eigenschaft manuell korrigierte es für mich.

0
P.Brian.Mackey

Ich habe zuerst eine Datenbank erstellt und die integrierte Vorlagengenerierung für meine Modelle verwendet (EF 4.1).

Ich habe den generierten Code in eine neue Datei kopiert und die Navigationseigenschaften entfernt. Da habe ich angefangen, diesen Fehler zu sehen. Ich habe Lazy Loading deaktiviert, aber es scheint, dass die Navigationseigenschaften in den POCOs noch erforderlich sind.

Ich vermute, der Fehler könnte darauf hindeuten, dass Ihrem Modell etwas fehlt.

namespace TestApp.BLL
{
    using System;
    using System.Collections.Generic;

    public partial class User
    {
        public User()
        {
            //this.Roles = new HashSet<Role>();
        }

        public int UserId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }

        //public virtual ICollection<Role> Roles { get; set; }
    }
}

Der obige Code zeigt die auskommentierten Navigationseigenschaften. Wenn ich sie bei allen POCOs kommentiere (das heißt auch die Rolle POCO), verschwindet die Ausnahme.

0
mbursill

Die Antwort auf die Frage lautet "Was sind die möglichen Ursachen für diesen Fehler?"

Dieser Fehler scheint jedes Mal aufzutreten, wenn das interne/EDMX-Modell nicht erfolgreich oder nicht vollständig erstellt wurde. Und für dieses Problem gibt es viele mögliche Ursachen. Es ist bedauerlich, dass es beim Erstellen des Modells anscheinend zu wenig Fehlermeldungen oder Fehlererkennung gibt. Daher ist das Lösen eines Problems eine Reihe von Dingen, um herauszufinden, was das Problem lösen kann.

In den letzten Tagen bin ich auf eine andere Instanz dieses Fehlers gestoßen, die EF 6.0 (derzeit Vorabversion-Code), Code-first und benutzerdefinierte Konventionen verwendet hat. Es stellt sich heraus, dass die Hauptursache darin liegt, dass ich eine benutzerdefinierte Konvention hatte, die die ID EdmProperty umbenennt (z. B. ID -> MyTypeId). Wenn ich meine benutzerdefinierte Konvention deaktiviert habe, ist dieses Problem behoben. Wenn ich meine Konvention aktiviere, tritt das Problem auf. Es gibt keine Protokollierung oder Ausnahmen oder andere Fehler, um darauf hinzuweisen, dass beim Erstellen des Modells ein Problem aufgetreten ist. Diese Ausnahme zieht sich nicht zurück, bis ich versuche, einem DbSet eine Entität hinzuzufügen. Die Konvention hat beim Generieren der Datenbank (über Migrationen) kein Problem verursacht.

0
crimbo