我的一个API路由使用了原始的SQL merge into
命令来执行原子插入操作。在我的自动化测试中,我有一个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 脚本的通常测试策略是什么?