1
APIルートの1つに、raw upsert操作を行うためにraw SQL merge into
コマンドが使用されています。自動テストでは、inを使用するTestServer
インスタンスがあります。 -memory db provider。インメモリプロバイダがraw SQLコマンドの実行をサポートしていないため、おそらくエラーですそうでない場合は、どうすればそれを動作させることができますか?EFコアとインメモリのdbプロバイダを使用したRaw 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スクリプトの通常のテスト戦略は何ですか?
また、3つのコンテキストがすべて同じ実際のデータベースを指していることに留意するだけで、異なるドメイン(テーブルのセット)のコードには別のコンテキストがあります。 – gzak