M.G*_*M.G 6 c# unit-testing entity-framework ef-core-2.2
我有一个方法,其中包含对EF.Functions.Contains
. 现在我想使用 InMemory 数据库为此方法编写单元测试,但我立即收到以下异常System.InvalidOperationException : The 'Contains' method is not supported because the query has switched to client-evaluation.
我的方法看起来像这样
var attributeValues = Context.AssetAttributeValues
.Include(a => a.AssetAttribute)
.Include(a => a.Asset)
.Where(i => EF.Functions.Contains(i.Value, searchString));
Run Code Online (Sandbox Code Playgroud)
我知道抛出此异常是因为与我的高效 SQL Server 实例相比,我的 InMemory 数据库上没有全文索引,但如何在 InMemory 数据库上获取相同的索引?
有什么办法可以解决这个异常吗?
就像你说的,EF.Functions.Contains
不能在 InMemory 数据库中使用。
解决方法是IsSqlServer()
检查您是否正在针对 SQL Server 或 InMemory 提供程序运行。
if(Context.IsSqlServer())
return Context.AssetAttributeValues
.Include(a => a.AssetAttribute)
.Include(a => a.Asset)
.Where(i => EF.Functions.Contains(i.Value, searchString));
else
return Context.AssetAttributeValues
.Include(a => a.AssetAttribute)
.Include(a => a.Asset)
.Where(i => i.Value.Contains(searchString));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1577 次 |
最近记录: |