如何在使用 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 支持的持久存储克隆到“内存中”?