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.