Es hat ein DefiningQuery, aber kein InsertFunction-Element ...

asp.net entity-framework

Frage

Diese Sache macht mich verrückt und der Fehler ist für mich völlig bedeutungslos:

Das EntitySet 'TableB' kann nicht aktualisiert werden, da es über eine DefiningQuery verfügt und kein Element im Element vorhanden ist, das den aktuellen Vorgang unterstützt.

Meine Tische sind wie folgt:

TableA
int idA (identity, primary key)
...

TableB
int idA (FK for TableA.idA)
int val

TableB hat keinen definierten Primärschlüssel im SQL-Server. Das Entity Framework hat die Tabelle und die Zuordnung importiert und beide Felder als Schlüssel festgelegt. Dieser Fehler wird jedoch ausgegeben, wenn ich versuche, in die Tabelle einzufügen.

Was ist falsch??


Edit: Wie von Alex vorgeschlagen, war die Lösung folgende:

  1. Klicken Sie mit der rechten Maustaste auf die edmx-Datei und wählen Sie Öffnen mit XML-Editor
  2. Suchen Sie die Entität im edmx: StorageModels-Element
  3. Entfernen Sie die DefiningQuery vollständig
  4. Benennen Sie den Store um: Schema = "dbo" in Schema = "dbo" (andernfalls generiert der Code einen Fehler, der besagt, dass der Name ungültig ist).
  5. Entfernen Sie den Store: Name-Eigenschaft

Ich habe den Schlüssel so belassen wie er war, da es für mich in Ordnung war, dass beide Spalten Teil des Schlüssels sind.

Akzeptierte Antwort

Wenn eine Tabelle ohne PrimaryKey angetroffen wird, wird sie als View behandelt.

Ansichten werden in der EDMX-Datei (geöffnet in einem XML-Editor zum Anzeigen) im Element StorageModel \ EntitySet [n] \ DefiningQuery angezeigt.

Wenn Sie über eine DefiningQuery verfügen, wird die Entität schreibgeschützt, sofern Sie keine Modifikationsfunktionen hinzufügen. Sie benötigen drei Modifikationsfunktionen (auch als gespeicherte Prozeduren bezeichnet), jeweils eine für Einfügen, Aktualisieren und Löschen.

Sie haben jedoch zwei Möglichkeiten:

Ändern Sie die Schlüsseldefinition:

  1. Und überzeugen Sie das EF, dass es sich wirklich um einen Tisch handelt
  2. Oder fügen Sie die entsprechenden Modifikationsfunktionen hinzu

In Ihrem Fall empfehle ich (1).


Beliebte Antwort

Fügen Sie einfach einen Primärschlüssel zur Tabelle hinzu. Das ist es. Problem gelöst.

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum