gza*_*zak 4 sql in-memory-database entity-framework-core
我的API路由之一使用了原始sql merge into命令来进行原子upsert操作,并且在我的自动化测试中,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"));
Run Code Online (Sandbox Code Playgroud)
API代码符合您的期望:
var count = await context.Database.ExecuteSqlCommandAsync(@"merge into ...", default(CancellationToken), ...);
return count;
Run Code Online (Sandbox Code Playgroud)
这段代码在实际数据库中的生产环境中运行良好,但是我无法在测试中与内存提供程序一起使用。我有什么希望吗?自定义sql脚本的通常测试策略是什么?
正如您所发现的,内存中提供程序无法执行关系操作(合理的限制)。
我遇到了类似的问题,最终组合了一个库来扩展内存中提供程序以支持关系操作 - EntityFrameworkCore.Testing。它将执行 ExecuteSqlCommand/ExecuteSqlCommandAsync 模拟。
| 归档时间: |
|
| 查看次数: |
1866 次 |
| 最近记录: |