如何在使用 SQLite 作为内存数据库的 ABP 框架上集成测试接受 SQL 参数的方法?

Posted

技术标签:

【中文标题】如何在使用 SQLite 作为内存数据库的 ABP 框架上集成测试接受 SQL 参数的方法?【英文标题】:How to integration test a method which accepts SQL parameters ,on ABP framework which uses SQLite as in-memory DB? 【发布时间】:2019-12-15 07:31:05 【问题描述】:

我有以下接受 SQL 参数来运行自定义查询的基类方法。使用使用 SQLite 作为内存数据库的 ABP 测试框架,我在运行集成测试时遇到以下错误。

 public int ExecuteNonQuery(string query, SqlParameter[] parameters, 
                             CommandType commandType = CommandType.Text)

消息:System.InvalidCastException:无法将类型 >'System.Data.SqlClient.SqlParameter' 的对象转换为类型 >'Microsoft.Data.Sqlite.SqliteParameter'。

可能的解决方法是使用 localDB 而不是 SQLite。是否有任何其他解决方案可以最大限度地减少此处实施的变化?

【问题讨论】:

你在使用 EF Core 吗? 【参考方案1】:

来自https://www.learnentityframeworkcore.com/raw-sql:

如果您使用格式字符串或字符串插值,Entity Framework Core 将参数化 SQL:

// Format string
var author = db.Authors.FromSql("SELECT * From Authors Where AuthorId = 0", id).FirstOrDefault();

// String interpolation
var author = db.Authors.FromSql($"SELECT * From Authors Where AuthorId = id").FirstOrDefault();

❗ Entity Framework Core 只会参数化插入的字符串,如果它们被内联提供给 FromSql 方法调用。

【讨论】:

以上是关于如何在使用 SQLite 作为内存数据库的 ABP 框架上集成测试接受 SQL 参数的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CoreData SQLite 支持的持久存储克隆到“内存中”?

SQLite 作为 SQL Server 的内存数据库

将Abp的UnitTest中的InMemory改为SQLite in memory

如何在特定地址创建 SQLite 内存数据库

如何使用 Spark SQL 作为内存数据库?

sqlite:如何在内存中使用