EF Core とインメモリ DB プロバイダーを使用した生の SQL 質問する

EF Core とインメモリ DB プロバイダーを使用した生の SQL 質問する

私の API ルートの 1 つは、merge intoアトミックな upsert 操作を実行するために生の SQL コマンドを使用しており、自動テストでは、TestServerインメモリ DB プロバイダーを使用するインスタンスがあります。インメモリ プロバイダーが生の SQL コマンドの実行をサポートしていないため、エラーが発生します。これは本当ですか? そうでない場合、どうすれば動作させることができますか?

Startupテストのクラスは次のとおりです。

// In memory DB for testing
services.AddDbContext<MyContext>(optionsBuilder => optionsBuilder.UseInMemoryDatabase("stuff"));
services.AddDbContext<MyStatusContext>(optionsBuilder => optionsBuilder.UseInMemoryDatabase("status"));
services.AddDbContext<MyUserRolesContext>(optionsBuilder => optionsBuilder.UseInMemoryDatabase("userroles"));

API コードは予想どおりです:

var count = await context.Database.ExecuteSqlCommandAsync(@"merge into ...", default(CancellationToken), ...);
return count;

このコードは実際のデータベースに対して本番環境では問題なく動作しますが、テストではメモリ内プロバイダーで動作させることができません。希望はありますか? カスタム SQL スクリプトの通常のテスト戦略は何ですか?

ベストアンサー1

InMemory プロバイダーは NoSQL 非リレーショナル プロバイダーなので、望みはありません。統合テストには SQL Server (localdb など) を使用する必要があります。

おすすめ記事