2009-10-19 7 views
119

Dieses Ding mich verrückt fährt, und der Fehler ist mir ziemlich sinnlos:Es hat eine DefiningQuery aber kein InsertFunction Element ... err

nicht imstande, die EntitySet ‚TableB‘ zu aktualisieren, da es eine DefiningQuery hat und In dem Element ist kein Element vorhanden, um die aktuelle Operation zu unterstützen.

Meine Tabellen sind so:

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

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

TableB hat keine definierte Primärschlüssel in der SQL-Server. Das Entity Framework hat die Tabelle und die Zuordnung importiert und beide Felder als Schlüssel festgelegt. Aber es wird diesen Fehler ausgeben, wenn ich versuche, eine Einfügung in die Tabelle durchzuführen!

Was ist los ??


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

  1. Direkt an der edmx Datei klicken, wählen Sie Öffnen mit, XML-Editor
  2. das Objekt im edmx lokalisieren : StorageModels Element
  3. die DefiningQuery entfernen
  4. Benennen Sie den Speicher vollständig: Schema = "dbo" auf Schema = "dbo" (sonst die Name-Eigenschaft

verließ ich den Schlüssel, wie es war, da es mir in Ordnung war, dass sowohl die Spalten als Teil des Schlüssels sind: Code wird eine Fehlermeldung, der Name ist ungültig)

  • Entfernen Sie den Speicher erzeugen.

  • +5

    Dank für das Update - die Schritt-für-Schritt-Anleitung geholfen Diese EF newb erhalten die ASP.NET MVC Tutorial App arbeiten! –

    +0

    Thnx dafür! Ich hatte ein Problem, dass EF keine richtige edmx-Datei für SQL-Server 2000-Tabelle generiert, die Primärschlüssel HAS hat. Aber diese Anweisung rettete mich :) – 100r

    +4

    3,5 Jahre später, und dieser Beitrag hilft immer noch PPL, in diesem Fall, ME! ... Um: Palantir für die Beschreibung Schritt für Schritt (es hat funktioniert) und dank Alex >>> Bravo! – nanonerd

    Antwort

    139

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

    Und Ansichten werden in der EDMX-Datei (in einem XML-Editor zu sehen) im StorageModel \ EntitySet [n] \ DefiningQuery-Element angezeigt.

    Wenn Sie eine DefiningQuery haben, wird die Entity schreibgeschützt, es sei denn, Sie fügen Modifikationsfunktionen hinzu. Sie benötigen 3 Modifikationsfunktionen (aka Stored Procedures) je eine für Insert, Update und Delete.

    Aber Sie haben zwei Möglichkeiten:

    Ändern Sie den Schlüssel Definion:

    1. And convince the EF that what it thinks is a view is really a table
    2. Oder fügen Sie die entsprechenden Änderungsfunktionen

    In Ihrem Fall empfehle ich (1).

    +0

    Das war großartig, danke! – Palantir

    +0

    Ausgezeichnet, perfekt gearbeitet. – SamuelWarren

    +0

    Ich habe diesen Fehler erhalten, als ich versuchte, einer Junction-Tabelle eine Entität hinzuzufügen. Dein Vorschlag hat es behoben, danke! –

    1

    @Palantir. Stellen Sie sicher, dass für beide Tabellen primäre Schlüssel festgelegt sind, und achten Sie auf mehrere Primärschlüssel, die in einer Tabelle festgelegt sind.

    12

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

    5

    Ich vermisste einen Primärschlüssel auf meinem Tisch und bekam diese Fehlermeldung. Eine Sache, die ich bemerkte, war, nachdem ich den Schlüssel der Tabelle hinzugefügt hatte, ich musste die Tabelle von der EDMX mit dem Designer löschen, speichern Sie die EDMX, dann aktualisieren Sie es erneut, um die Tabelle wieder hinzuzufügen. Es war nicht den Schlüssel abholen da es bereits als Ansicht zugewiesen wurde. Dies erforderte keine manuelle Bearbeitung des edmx.

    3

    hinzufügen Primärschlüssel Tabelle, löschen Sie das Modell aus dem edmx Modell, und wählen Sie Aktualisierung von Datenbank erstellen und auszuführen ...... arbeitet

    Verwandte Themen