簡體   English   中英

使用EF.Functions.Contains()的單元測試方法

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM