我在much more long-winded way a few days ago中問過這個問題,考慮到長度,我沒有得到答案的事實並不令人驚訝,所以我想我會更加註意。1000+ Linq查詢或數據庫中的邏輯......這更糟?
我必須根據他們對特定客戶的分配來決定如何顯示用戶。域對象看起來像這樣大大簡化的例子:
public class Customer
{
public string Name { get; set; }
public IEnumerable<Users> AssignedUsers { get; set; }
}
在現實世界中,我也會評估他們是否有權限(使用安全標誌按位比較)來查看,即使他們AREN這個特定的客戶沒有直接分配給它。
我想在這裏堅持domain-driven design(DDD)的原則。另外,我使用LINQ to SQL來進行數據訪問。在我的服務層,我向用戶提供請求客戶名單的信息,目前約有1000個項目,每月增長約2%。
如果我對服務層中的邏輯保持嚴格,我將需要使用Linq來執行.Where
,它將評估AssignedUsers
列表是否包含請求列表的用戶。當系統列舉時,這將導致每個Customer
的級聯查詢。我沒有做任何測試,但這似乎效率低下。
如果我對數據中的邏輯沒有依據,那麼我可以簡單地使用GetCustomersByUser()
方法,該方法將同時執行一個類型的SQL查詢並評估安全性。這肯定會更快,但現在我正在談論邏輯蔓延到數據庫中,這可能會在稍後造成問題。
我敢肯定,這是人們在推出Linq時出現的一個常見問題......有哪些方法更好的建議?在我的數據庫中,Linq的多重查詢的性能好於邏輯嗎?
如果你大多試圖檢索分配給用戶的客戶,你應該不會修改你的對象,並擁有一個帶有AssignedCustomers列表的用戶? – Mathias 2010-06-23 22:27:26
例如,用戶分配的實際數據 - 他們收到的佣金。因此,不管您以哪種方式查看它,多對多關係都需要一個單獨的賦值對象。我們也批發,因此用戶是我們真正的客戶。 – 2010-06-24 11:26:29
我在想更多關於那個評論......實際上可能有一種方法來觸發它,並使Assignment對象和它的數據專注於客戶而不是用戶...... – 2010-06-24 11:42:06