602 Stimmen

EntitySet kann nicht aktualisiert werden, da es eine DefiningQuery hat und kein <UpdateFunction>-Element vorhanden ist

Ich verwende Entity Framework 1 mit .net 3.5.

Ich mache etwas Einfaches wie das hier:

var roomDetails = context.Rooms.ToList();

foreach (var room in roomDetails)
{        
   room.LastUpdated = DateTime.Now;
}

Ich erhalte diese Fehlermeldung, wenn ich versuche, dies zu tun:

 context.SaveChanges();

Ich erhalte die Fehlermeldung:

Das EntitySet kann nicht aktualisiert werden, weil es eine DefiningQuery hat und kein <UpdateFunction>-Element im <ModificationFunctionMapping>-Element vorhanden ist, um den aktuellen Vorgang zu unterstützen.

Ich führe viele Aktualisierungen im Kontext durch und habe keine Probleme, nur wenn ich versuche, diese bestimmte Entität zu aktualisieren.

Alle meine Suche zeigt die gleiche Sache, dass es keine Primärschlüssel auf die Entität, die ich versuche, zu aktualisieren deklariert ist. Aber ach, ich habe einen Primärschlüssel deklariert...

1voto

Willy David Jr Punkte 7717

Ich hatte genau das gleiche Problem, leider löst das Hinzufügen des Primärschlüssels das Problem nicht. Hier ist also, wie ich mein Problem löse:

  1. Stellen Sie sicher, dass Sie eine primary key auf die Tabelle, also ändere ich meine Tabelle und füge einen Primärschlüssel hinzu.
  2. Delete the ADO.NET Entity Data Model (edmx-Datei), die ich für die Zuordnung und Verbindung mit meiner Datenbank verwende.
  3. Add again a new file of ADO.NET Entity Data Model um eine Verbindung mit meiner Datenbank herzustellen und meine Modelleigenschaften zuzuordnen.
  4. Clean and rebuild the solution.

Problem gelöst.

1voto

Stark Punkte 426

Ich hatte dieses Problem, weil ich mein EDMX aus einer bestehenden Datenbank generiert habe (die von jemand anderem entworfen wurde, und ich verwende den Begriff "entworfen" hier sehr großzügig).

Es stellte sich heraus, dass der Tisch überhaupt keine Schlüssel hatte. EF hat das Modell mit vielen Mehrfachschlüsseln generiert. Ich musste der DB-Tabelle in SQL einen Primärschlüssel hinzufügen und dann mein Modell in VS aktualisieren.

Damit ist das Problem für mich gelöst.

0voto

dangalg Punkte 6159

Ich musste nur die Tabelle aus dem Modell entfernen und das Modell erneut aktualisieren, um die Tabelle zurückzubringen. Ich vermute, der Primärschlüssel wurde erstellt, nachdem die Tabelle in das Modell gezogen wurde.

0voto

armstb01 Punkte 613

Ich hatte dieses Problem und glaube, dass es verursacht wurde, weil ich den Index für den Primärschlüssel meiner Tabelle gelöscht und ihn durch einen Index für einige der anderen Felder in der Tabelle ersetzt hatte.

Nachdem ich den Primärschlüsselindex gelöscht und den edmx aktualisiert hatte, funktionierten die Einfügungen nicht mehr.

Ich habe die Tabelle auf die ältere Version aktualisiert, das edmx aktualisiert und alles funktioniert wieder.

Als ich die EDMX-Datei öffnete, um dieses Problem zu beheben und zu prüfen, ob ein Primärschlüssel definiert war, war dies der Fall. Keiner der oben genannten Vorschläge konnte mir also helfen. Aber das Aktualisieren des Index für den Primärschlüssel schien zu funktionieren.

0voto

Sharad Tiwari Punkte 31

Öffnen Sie Ihre .edmx-Datei im XML-Editor und entfernen Sie Tag aus Tag und ändern Sie auch store:Schema="dbo" in Schema="dbo" und bauen Sie die Lösung neu auf, damit der Fehler behoben wird und Sie die Daten speichern können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X