Ich habe versucht, den Statuscode einer Ausführung einer gespeicherten Prozedur zu erhalten, wenn dieser Fehler aufgetreten ist:
Eine Ausnahme vom Typ 'System.Data.Entity.Core.EntityCommandExecutionException' ist in EntityFramework.SqlServer.dll aufgetreten, wurde aber nicht im Benutzercode behandelt
Zusätzliche Information: Der Datenleser hat mehr als ein Feld. Mehrere Felder sind für EDM-Grundtypen oder Aufzählungstypen nicht gültig.
Ich habe die Prozedur umgeschrieben, um absolut nichts anderes zu tun, als einen ganzzahligen Wert zurückzugeben, so sieht es jetzt aus:
%Vor%Aber ich bekomme immer noch den gleichen Fehler zur Laufzeit beim Erreichen des Prozeduraufrufs in Zeile:
%Vor%Gibt es überhaupt Informationen darüber, was diese Felder sind und woher sie kommen? Und wie soll ich den zurückgegebenen Wert erhalten?
Ich habe versucht, ein Tupel mit zwei Strings als T
anzugeben, nur um diese Werte zu sehen, aber ohne Erfolg ...
Updates:
Select 1
statt return 1
macht die Funktion nutzbar, die einzige Frage bleibt, was sind diese mysteriösen Felder, die an den Datenleser zurückgegeben werden?
Database.SqlQuery<T>()
erwartet irgendeine Art von Ergebnismenge (z. B. SELECT
). Unter der Haube verwendet es DbCommand.ExecuteReader()
, und wenn T
ist skalar und erwartet, dass die Ergebnismenge genau ein Feld enthält. Wenn die Ergebnismenge jedoch mehr als ein Feld enthält, oder wenn keine Felder vorhanden sind, wird die angegebene Ausnahme ausgelöst.
Der Rückgabewert kann abgerufen werden, indem ein DbParameter
an Database.SqlQuery<T>()
und Einstellung Direction = ParameterDirection.ReturnValue
wie in diesen Beispielen zu sehen:
FYI, wenn Sie nur den Rückgabewert wünschen, aber keine Ergebnismenge wollen, verwenden Sie ExecuteSqlCommand
mit einem DbParameter
.
Ich denke, die Antwort von Charlie ist richtig. Aber Sie müssen den Code wie folgt schreiben.
%Vor%Ich kam zu einer ähnlichen Situation, ich rief eine Prozedur von EF und die Prozedur hatte einige Druckanweisungen, EF wurde verwirrt, da es alle Drucke als Ausgabe liest. Stellen Sie sicher, dass Sie alle Ausdrucke kommentieren, bevor Sie sie in EF verwenden.
Tags und Links .net sql-server c# entity-framework