[英]Unit Test method with EF.Functions.Contains()
我有一个方法,其中包含对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));
我知道抛出这个异常是因为我的InMemory数据库上没有全文索引与生产的SQL Server实例相比,但是如何在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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.