私はEF Core 3を使用して、次のようなテーブルからすべての行を削除しようとしています:
db.MyTable.ExecuteSqlRaw("delete from MyTable;");
しかし、私はエラーが出ます:
DbSet 'には' ExecuteSqlRaw 'の定義が含まれておらず、タイプ' DbSet 'の最初の引数を受け入れるアクセス可能な拡張メソッド' ExecuteSqlRaw 'が見つかりません(usingディレクティブまたはアセンブリ参照がありませんか?)
EF Core 3のMicrosoftの最新の変更ページでは、これを有効にするために必要な特別なパッケージがあるかどうかについてのアドバイスはありません。
これらは私がインストールした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
は使用できますが、ExecuteSqlRaw
、ExecuteSqlRawAsync
などは使用できません。
[〜#〜] edit [〜#〜]:using Microsoft.EntityFrameworkCore
を追加すると、エラーが次のように変わります:
'DbSet'には 'ExecuteSqlRaw'の定義が含まれておらず、最適な拡張メソッドオーバーロード 'RelationalDatabaseFacadeExtensions.ExecuteSqlRaw(DatabaseFacade、string、params object [])'にはタイプ 'DatabaseFacade'のレシーバーが必要です
新しいエラーに関する私の編集は私に答えを導きました:
Microsoft Breaking Changesのドキュメントは、Executeメソッドの例を提供していません。これを機能させるには、代わりに「データベース」プロパティを通過する必要があります。つまり、これらを使用するには:
using Microsoft.EntityFrameworkCore;
_があることを確認してくださいmyContext.Database.ExecuteSqlRaw(@"...sql to excxute...")
を使用しますNuGetパッケージ参照を追加する必要がありますMicrosoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions
をプロジェクトに追加します。