我有一个方法,其中包含对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));
我知道引发此异常是因为与生产性SQL Server实例相比,我的InMemory数据库上没有全文索引,但是如何在InMemory数据库上获得相同的索引?
有什么办法可以解决这个异常?
答案 0 :(得分:0)
就像您说的那样,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));