Ich komme in das Entity Framework, bin mir aber nicht sicher, ob mir ein kritischer Punkt im Code-First-Ansatz fehlt.
Ich verwende ein generisches Repository-Muster, das auf dem Code von https://genericunitofworkandrepositories.codeplex.com/ basiert, und habe meine Entitäten erstellt.
Wenn ich jedoch versuche, auf die Entität zuzugreifen oder sie zu ändern, stoße ich auf Folgendes:
System.InvalidOperationException: Der Entitätstyp Estate ist nicht Teil des Modells für den aktuellen Kontext.
Es passiert, wenn ich versuche, von meinem Repository aus darauf zuzugreifen:
public virtual void Insert(TEntity entity)
{
((IObjectState)entity).ObjectState = ObjectState.Added;
_dbSet.Attach(entity); // <-- The error occurs here
_context.SyncObjectState(entity);
}
Die Datenbank (./SQLEXPRESS) wird einwandfrei erstellt, aber die Entitäten (Tabellen) werden beim Start einfach nicht erstellt.
Ich frage mich, ob ich die Zuordnung der Entitäten explizit festlegen muss. Kann EF das nicht alleine?
Mein Wesen ist:
public class Estate : EntityBase
{
public int EstateId { get; set; }
public string Name { get; set; }
}
Mein Kontext ist wie folgt:
public partial class DimensionWebDbContext : DbContextBase // DbContextBase inherits DbContext
{
public DimensionWebDbContext() :
base("DimensionWebContext")
{
Database.SetInitializer<DimensionWebDbContext>(new CreateDatabaseIfNotExists<DimensionWebDbContext>());
Configuration.ProxyCreationEnabled = false;
}
public new IDbSet<T> Set<T>() where T : class
{
return base.Set<T>();
}
}
Gibt es einen bestimmten Grund, warum dieser Fehler auftritt? Ich habe versucht, Migrationen zu aktivieren und automatische Migrationen auch ohne Hilfe zu aktivieren.
quelle
OnModelCreating
wenn sich Ihre Entitäten in derselben Assembly wie Ihre befindenDbContext
. Ich habe jedoch noch nie Datenanmerkungen für Entitäten verwendet, daher kann ich nicht sicher sagen. Sie können Baugruppen in Ihrer Baugruppe jederzeit scannenOnModelCreating
, um Entitäten in anderen Baugruppen zu finden und diese automatisch zu registrieren (was Tripod tut).Anscheinend ist dieser Fehler sehr allgemein gehalten und kann mehrere Gründe haben. In meinem Fall war es das Folgende: Die von der generierte Verbindungszeichenfolge (in Web.config)
.edmx
war ungültig. Nachdem ich fast einen Tag lang alles ausprobiert hatte, änderte ich die Verbindungszeichenfolge von der EF-Zeichenfolge in eine ADO.NET-Zeichenfolge. Dies löste mein Problem.Die EF-Zeichenfolge sieht beispielsweise folgendermaßen aus:
Und die ADO.NET-Zeichenfolge sieht folgendermaßen aus:
Quelle: http://msdn.microsoft.com/nl-nl/data/jj556606.aspx
quelle
EF 4.x
aufEF 6
. Ich musste die Verbindungszeichenfolge neu generieren, um eine Tabelle (DatabaseFirst
) hinzuzufügen . Ich habe nicht bemerkt, dass meine Verbindungsschnur in derapp.config
und dieweb.config
unterschiedlich waren. Nachdem ich dasconnectionstring
von übernommen hatteapp.config
, fing es an zu funktionieren.Für mich bestand das Problem darin, dass ich die Entitätsklasse nicht in meine Datenbank aufgenommen hatte, die im Kontext für das Entitätsframework enthalten war.
quelle
Sie können versuchen, die Tabelle aus dem Modell zu entfernen und erneut hinzuzufügen. Sie können dies visuell tun, indem Sie die EDMX-Datei im Projektmappen-Explorer öffnen.
Schritte:
quelle
Das Problem liegt möglicherweise in der Verbindungszeichenfolge. Stellen Sie sicher, dass Ihre Verbindungszeichenfolge für den SqlClient-Anbieter bestimmt ist und keine Metadaten mit EntityFramework verknüpft sind.
quelle
Ich habe diesen Fehler gesehen, wenn eine vorhandene Tabelle in der Datenbank einem Code-First-Modell nicht angemessen zugeordnet ist. Insbesondere hatte ich ein Zeichen (1) in der Datenbanktabelle und ein Zeichen in C #. Das Ändern des Modells in eine Zeichenfolge hat das Problem behoben.
quelle
Mein Problem wurde behoben, indem der Metadatenteil der Verbindungszeichenfolge aktualisiert wurde. Anscheinend zeigte es auf die falsche .csdl / .ssdl / .msl-Referenz.
quelle
Eine andere Sache, die Sie mit Ihrer Verbindungszeichenfolge überprüfen sollten - den Modellnamen. Ich habe zwei Entitätsmodelle verwendet, zuerst DB. In der Konfiguration habe ich die Entitätsverbindung für eine kopiert, umbenannt und den Teil der Verbindungszeichenfolge geändert. Was ich nicht geändert habe, war der Modellname. Während das Entitätsmodell korrekt generiert wurde, suchte EF beim Initiieren des Kontexts im falschen Modell nach den Entitäten.
Sieht offensichtlich aufgeschrieben aus, aber es gibt vier Stunden, in denen ich nicht zurückkomme.
quelle
Für mich war das Problem, dass ich das
connection string
vonADO.Net
Model (.edmx) generierte verwendet habe. Das Ändern der Verbindungszeichenfolge hat mein Problem behoben.quelle
Dies kann auch auftreten, wenn Sie einen persistenten Modellcache verwenden, der aus dem einen oder anderen Grund veraltet ist. Wenn Ihr Kontext in einer EDMX-Datei in einem Dateisystem zwischengespeichert wurde (über DbConfiguration.SetModelStore), wird OnModelCreating niemals aufgerufen, da die zwischengespeicherte Version verwendet wird. Wenn eine Entität in Ihrem zwischengespeicherten Speicher fehlt, wird der obige Fehler angezeigt, obwohl die Verbindungszeichenfolge korrekt ist, die Tabelle in der Datenbank vorhanden ist und die Entität in Ihrem DbContext korrekt eingerichtet ist.
quelle
Die Nachricht war ziemlich klar, aber ich habe sie zuerst nicht verstanden ...
Ich arbeite mit zwei Entity Framework DB-Kontexten
sysContext
undshardContext
in derselben Methode.Die Entität, die ich geändert oder aktualisiert habe, stammt aus einem Kontext, aber dann habe ich versucht, sie wie folgt im anderen Kontext zu speichern:
aber die richtige Version sollte folgende sein:
Nachdem die Entität an den richtigen Kontext übergeben wurde, wurde dieser Fehler behoben.
quelle
Klingt offensichtlich, aber stellen Sie sicher, dass Sie den Typ nicht explizit ignorieren:
modelBuilder.Ignore<MyType>();
quelle
Eine Karte der Entität (auch eine leere), die der Konfiguration hinzugefügt wurde, führt dazu, dass der Entitätstyp Teil des Kontexts ist. Wir hatten eine Entität ohne Beziehung zu anderen Entitäten, die mit einer leeren Karte behoben wurde.
quelle
Wenn Sie zuerst DB versuchen, stellen Sie sicher, dass Ihre Tabelle über einen Primärschlüssel verfügt
quelle
Visual Studio 2019 scheint dies für mich zu verursachen. Ich habe es behoben, indem ich das edmx-Modell 2017 erneut generiert habe.
quelle
Ich habe das gleiche Problem in Entity Framewrok und habe es folgendermaßen gelöst:
1-Öffnen Sie Ihre Model.edmx 2-ändern Sie einen Tabellenplatz (zum Ändern in der cs-Datei) 3-speichern Sie ihn
Ich hoffe dir zu helfen
quelle
Löschen Sie die .edmx-Datei und fügen Sie sie erneut hinzu. Insbesondere, wenn Sie das Entity Framework aktualisiert haben.
quelle
Ich hatte das gleiche Problem mit EntityFrameworkCore, das versuchte, einen Wertebereich zu aktualisieren.
Dieser Ansatz hat nicht funktioniert
Nach dem Hinzufügen der UpdateRange-Methode und dem Entfernen von Anhängen und Eingeben funktioniert alles
quelle
Für mich wurde es verursacht, weil ich die Entitätsklasse umbenannt habe. Als ich sie zurückrollte, war es in Ordnung.
quelle
Könnte dumm sein, aber wenn Sie diesen Fehler nur in einer Tabelle haben, vergessen Sie nicht, Ihr Projekt zu bereinigen und neu zu erstellen (könnte viel Zeit sparen)
quelle
Ich hatte das
Dies war eine asynchrone Methode, aber ich habe vergessen, vor GetEntryAsync zu warten, und so habe ich den gleichen Fehler erhalten ...
quelle