web-dev-qa-db-ja.com

Entity Framework Core 3のraw SQL欠落メソッド

私はEF Core 3を使用して、次のようなテーブルからすべての行を削除しようとしています:

db.MyTable.ExecuteSqlRaw("delete from MyTable;");

しかし、私はエラーが出ます:

DbSet 'には' ExecuteSqlRaw 'の定義が含まれておらず、タイプ' DbSet 'の最初の引数を受け入れるアクセス可能な拡張メソッド' ExecuteSqlRaw 'が見つかりません(usingディレクティブまたはアセンブリ参照がありませんか?)

EF Core 3のMicrosoftの最新の変更ページでは、これを有効にするために必要な特別なパッケージがあるかどうかについてのアドバイスはありません。

https://docs.Microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#fromsql-executesql-and-executesqlasync-have-been-名前が変更されました

これらは私がインストールしたNugetパッケージです:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Include="System.Linq" Version="4.3.0" />
<PackageReference Include="System.Linq.Expressions" Version="4.3.0" />
<PackageReference Include="System.Linq.Queryable" Version="4.3.0" />

ステートメントの使用:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;

FromSqlRawは使用できますが、ExecuteSqlRawExecuteSqlRawAsyncなどは使用できません。

[〜#〜] edit [〜#〜]using Microsoft.EntityFrameworkCoreを追加すると、エラーが次のように変わります:

'DbSet'には 'ExecuteSqlRaw'の定義が含まれておらず、最適な拡張メソッドオーバーロード 'RelationalDatabaseFacadeExtensions.ExecuteSqlRaw(DatabaseFacade、string、params object [])'にはタイプ 'DatabaseFacade'のレシーバーが必要です

3
FirstDivision

新しいエラーに関する私の編集は私に答えを導きました:

Microsoft Breaking Changesのドキュメントは、Executeメソッドの例を提供していません。これを機能させるには、代わりに「データベース」プロパティを通過する必要があります。つまり、これらを使用するには:

  1. _using Microsoft.EntityFrameworkCore;_があることを確認してください
  2. 実行を使用する場合はmyContext.Database.ExecuteSqlRaw(@"...sql to excxute...")を使用します
0
FirstDivision

NuGetパッケージ参照を追加する必要がありますMicrosoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensionsをプロジェクトに追加します。

0
CXuesong