Ich bin kürzlich von EF Core 2.2 auf EF Core 3.0 migriert.
Leider habe ich keine Möglichkeit gefunden, eine gespeicherte Prozedur aufzurufen, die eine Entität zurückgibt.
In EF Core 2.0 war Folgendes möglich:
var spParams = new object[] { "bla", "xx" };
var createdPath = ModelContext.Paths.FromSql("AddNodeWithPathProc @p0, @p1", spParams).Single();
In EF Core 3.0 wird die Methode FromSQL
durch ersetzt FromSqlRaw
. Es ist mir jedoch nicht gelungen, eine gespeicherte Prozedur erfolgreich aufzurufen und den Wert dann zu verarbeiten. Dies ist nützlich, wenn die gespeicherte Prozedur Daten in die Datenbank einfügt.
In EF Core 3.0 verwende ich diesen Code:
var createdPath = ModelContext.Paths.FromSqlRaw("AddNodeWithPathProc @p0, @p1", spParams).Single();
Es wird jedoch eine Ausnahme ausgelöst, da die generierte SQL ungültig ist und ungefähr so aussieht:
exec sp_executesql N'SELECT TOP(2) [p].[PathId], [p].[Level], [p].[NodeId], [p].[NodePath], [p].[NodePathString]
FROM (
@sql @p0, @p1
) AS [p]',N'@p0 nvarchar(4000),@p1 nvarchar(4000), @sql nvarchar(100)',@p0=N'1a',@p1=N'', @sql=N'AddNodeWithPathProc'
Ich habe einige Variationen ausprobiert, aber ohne Erfolg.
Ich fange an zu denken, dass es nicht möglich ist, gespeicherte Prozeduren mit auszuführen ModelContext.[IQueryable].FromSqlRaw
. Meiner Meinung nach besiegt diese Art einen der Hauptgründe dafür FromSqlRaw
, dass LINQ für normale Select-Anweisungen normalerweise gut genug ist.
Weiß jemand, wie man gespeicherte Prozeduren in Kombination mit FromSqlRaw
in EF Core 3.0 verwendet? Jede Hilfe wird sehr geschätzt.
Danke im Voraus
PS: Ich weiß, dass Sie eine gespeicherte Prozedur mit ausführen können this.Database.ExecuteSqlRaw(SQL, parameters)
. Auf diese Weise ist es jedoch nicht möglich, Entitäten abzurufen, die von der gespeicherten Prozedur abgefragt werden.
Antworten:
Lösung (dank David Browne hätten Sie es als Antwort posten sollen):
Single durch ToList zu ersetzen funktioniert :-)
quelle
Bei Bedarf können Sie mehrere Parameter hinzufügen. Hinweis:
quelle
Ich bin nicht dort, wo ich testen kann, aber ich denke, dass Folgendes funktionieren wird:
quelle
versuchen Sie, SqlParameter zu trennen:
quelle
Es ist extrem seltsam ... kurz vor ein paar Tagen habe ich das gleiche Problem und folge diesem Beitrag. Ich hatte diesen Anruf:
Im Moment ist alles in Ordnung und dieser Anruf funktioniert wie erwartet. Daher sollte ich zugeben, dass es kein Problem mit der Rückgabe von Datensätzen und Parametern für EF auf Core 3 gibt.
quelle