[英]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.