最近、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
。私の意見FromSqlRaw
では、通常の選択ステートメントの場合、通常LINQで十分なため、この種類は主な理由の1つを打ち負かします。
誰かがストアドプロシージャFromSqlRaw
をEF Core 3.0 と組み合わせて使用する方法を知っていますか?どんな助けでも大歓迎です。
前もって感謝します
PS:でストアドプロシージャを実行できることは知っていますthis.Database.ExecuteSqlRaw(SQL, parameters)
。ただし、この方法では、ストアドプロシージャがクエリするエンティティを取得することはできません。