【发布时间】:2018-02-15 08:42:23
【问题描述】:
我的一个 API 路由使用原始 sql merge into 命令来执行原子 upsert 操作,在我的自动化测试中,我有一个使用内存数据库提供程序的 TestServer 实例。它给了我一个错误,可能是因为内存提供程序不支持运行原始 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 个上下文都指向同一个真实数据库,我们只是在代码中为不同的域(表集)设置了单独的上下文。
标签: sql entity-framework-core in-memory-database