sql - 带有EF Core和内存数据库提供程序的原始SQL

标签 sql entity-framework-core in-memory-database

我的API路由之一使用了原始的sql merge into命令来进行原子upsert操作,在自动测试中,我有一个使用内存db提供程序的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脚本的通常测试策略是什么?

最佳答案

您没有希望,因为InMemory提供程序是NoSQL非关系提供程序。您应该使用SQL Server(例如localdb)进行集成测试

关于sql - 带有EF Core和内存数据库提供程序的原始SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46082301/

相关文章:

sql - 检查数据是否已存在并插入的更好方法

mysql - 内部加入 like 子句

c# - DBContext 不包含条目 : Cannot load related data 的定义

c# - 从可视化 foxpro 数据源动态获取架构的速度问题

entity-framework - Entity Framework : Cascading foreign key cannot be created where the referencing column is an identity column.无法创建约束或索引

c# - 应该在 DTO 模型中还是在目标实体模型中执行计算?

c# - 无法在集成测试中在模拟的 InMemory 数据库中播种数据

http - angular2 http.delete on-memory-web-api

c++ - 有人对 FastDB(C++ 内存数据库)有任何经验吗?

sql - 如何在 spring JPA @query 中使用忽略大小写?