正在調用AsQueryable <T>在DbSet上<T> “安全”?

.net c# entity-framework-6

假設我想單元測試Entity Framework的查詢邏輯,一種方法是在構建表達式樹之前將DbSet<T>轉換為IQueryable<T>以便於DbSet<T> 。這是“安全的”,有什麼需要注意的嗎?

一般承認的答案

它不僅安全,而且是合法的,完全標準的。這就是OO的全部意義所在。你只是沮喪。根據設計者定義的合同, DbSetIQUeryable


熱門答案

小心使用AsQueryable() 。如果在調用AsQueryable()您的某個變量的類型為IQueryable<IEntity> ,則您不再知道該變量的具體類型是什麼 (在您的示例中 DbSet<IEntity> )。

雖然它從OOP的角度來看是完全有效的 (這是接口的全部要點!),但它可能會導致很多錯誤/錯誤。請記住,在枚舉DbSet<IEntity>源之前,您實際上並不執行查詢。

這就是為什麼例如你不能使用.Union(...)DbSet<IEntity>的結果加入內存中的IQueryable<IEntity> (例如new List<IEntity>{ ... }.AsQueryable().Union(...) ...




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因