Löschen des Entitätsobjekts mit einer Zuordnung von 1 zu vielen zu einer sichtbasierten Entität

8

Ich habe ein Model-First-Entitätsmodell, das eine Customer-Tabelle enthält, die mit einer View verknüpft ist, die Kundendetails aus einer separaten Datenbank abruft. Die Beziehung ist eins zu viele zwischen der Customer-Tabelle und der View und ich habe eine Navigationseigenschaft sowohl für die Customer-Entität als auch für die View-Entität.

Wenn ich versuche, eine Löschung mit context.Customers.DeleteObject (cust) und call context.SaveChanges () durchzuführen, erhalte ich einen Fehler:

  

Das EntitySet 'ViewEntity' konnte nicht aktualisiert werden, da es ein DefiningQuery-Element und kein Element [DeleteFunction] -Element exists zur Unterstützung der aktuellen Operation enthält.

Ich habe versucht, On Delete Cascade und None zu setzen und beide erzeugen den gleichen Fehler.

EDIT: Es gibt nicht viel Code zu zeigen, aber hier gehen Sie:

%Vor%     
Overhed 22.04.2016, 00:53
quelle

3 Antworten

1

Ich konnte dieses Problem umgehen, indem ich eine Dummy Stored Procedure erstellte, die nichts ausführte ("SELECT 'Done'") und die SP Function Mapping in meinen beiden Views verwendete, um die Delete-Funktion auf diese Stored Procedure zu setzen. Ziemlich ein Hack, aber es hat funktioniert.

Ich bin mir nicht sicher, warum eine Löschfunktion für eine Ansicht erforderlich ist oder ob ich etwas anderes falsch mache, was das Problem verursacht hat, aber das obige hat für mich funktioniert.

    
Overhed 09.05.2016, 00:01
quelle
1

Viele verwandte Beiträge in SO stimmen mit @Overmachine überein ... Sie verpassen wahrscheinlich einen Primärschlüssel für Ihre Entität / Tabelle.

Siehe ..

weil es eine DefiningQuery und keine & lt; InsertFunction & gt; Element existiert in der & lt; ModificationFunctionMapping & gt; Element

und

Das EntitySet konnte nicht aktualisiert werden, da es eine DefiningQuery und keine & lt; UpdateFunction & gt; Element existiert

BEARBEITEN

Sie haben Ihren Kommentar zu Ihrer Customer -Tabelle nur mit einem Primärschlüssel gesehen, aber nicht mit Ihrer Ansicht. Nicht sicher, was passiert, ohne mehr Code, aber letztlich ist alles, was Sie brauchen, ein Customer -Objekt mit dem / den Primärschlüssel (n), dann können Sie den folgenden Code verwenden, um ein losgelöstes Entitätsobjekt zu löschen.

%Vor%

Wenn Sie von einem anderen Typ casten und Probleme verursachen, können Sie auch Folgendes tun:

%Vor%     
Chris Curtis 04.05.2016 17:50
quelle
0

Ich denke, Sie sollten alle Fremdschlüssel in View verwenden. Wenn Sie alle Fremdschlüssel und Primärschlüssel in der Ansicht verwenden, können Sie das Objekt als Kaskade aktualisieren und löschen.

    
M.Nasrifard 10.05.2016 12:21
quelle