FromSqlRaw 経由で EF Core 3.0 でストアド プロシージャを呼び出す方法 質問する

FromSqlRaw 経由で EF Core 3.0 でストアド プロシージャを呼び出す方法 質問する

最近、EF Core 2.2 から EF Core 3.0 に移行しました。

残念ながら、エンティティを返すストアド プロシージャを呼び出す方法が見つかりませんでした。

EF Core 2.0 では次のことが可能でした:

var spParams = new object[] { "bla", "xx" };
var createdPath = ModelContext.Paths.FromSql("AddNodeWithPathProc  @p0, @p1", spParams).Single();

EF Core 3.0 では、 メソッドFromSQLは に置き換えられましたFromSqlRaw。ただし、ストアド プロシージャを正常に呼び出して値を処理することはできませんでした。これは、ストアド プロシージャがデータベースにデータを挿入する場合に役立ちます。

したがって、EF Core 3.0 では次のコードを使用します。

var createdPath = ModelContext.Paths.FromSqlRaw("AddNodeWithPathProc @p0, @p1", spParams).Single();

ただし、生成された SQL が無効であり、次のようなものになるため、例外がスローされます。

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'

いろいろなバリエーションを試してみましたが、成功しませんでした。

ではストアド プロシージャを実行できないのではないかと考え始めていますModelContext.[IQueryable].FromSqlRaw。私の意見では、この種類は の主な理由の 1 つに反します。FromSqlRaw通常の選択ステートメントでは、LINQ で十分だからです。

EF Core 3.0でストアド プロシージャを組み合わせて使用​​する方法をご存知の方はいらっしゃいますかFromSqlRaw? ご協力いただければ幸いです。

前もって感謝します

PS: を使用してストアド プロシージャを実行できることは知っていますthis.Database.ExecuteSqlRaw(SQL, parameters)。ただし、その方法では、ストアド プロシージャがクエリするエンティティを取得することはできません。

ベストアンサー1

解決策 (David Browne に感謝します。回答として投稿するべきでした):

Single を ToList に置き換えると動作します :-)

var createdPath = ModelContext.Paths.FromSqlRaw("AddNodeWithPathProc  {0}, {1}", nodeTitle, parentPathString).ToList();

おすすめ記事