2011-08-19 56 views
0

我有一個類A,其中包含Bs列表:IList。這將As與Bs關聯(映射爲多對多關係)。 As和Bs之間的關聯由包含Bs的外部源決定。請注意,出於效率原因,我的數據庫中有一份Bs文件。有時我必須運行一個腳本來確定屬於特定A的所有Bs。腳本返回一些可用於從存儲庫中獲取Bs的密鑰。速度相關的問題 - (F)NHibernate

現在,每次運行此更新時,我都清除Bs列表並通過我的存儲庫獲取每個B.這是非常低效的。我只是想知道是否有什麼我可以做得更快?

我曾嘗試只使用B的ID的列表在這裏:

Fluent Nhibernate problem

,但我不能堅持一段不明原因的ID,所以我可能要使用的「完全吹塑成型」的列表實體再次,這是沒有問題的,但有通過存儲庫一個接一個地獲得每個實體的開銷。

任何反饋將非常感激。非常感謝。

最良好的祝願,

基督教

回答

1

這種情況下,有Session.Load

X.Blas.Add(Session.Load(bid)); // returns a proxy with initialized Id, almost the same as the id 

,我認爲X.Blas.Clear();會優於X.Blas = new Iesi.Collections.Generic.HashedSet<B>();

編輯:有效地加載多個BS你也可以做

var blist = Session.QueryOver<B>() 
    .Where(b => b.Id.IsIn(IdList)) 
    .List(); 

進一步節省一些工作,你可以

foreach(var bid in idList) 
{ 
    var b = Session.Load(bid); 
    if (!x.SetOfBs.Contains(b)) 
     x.SetOfBs.Add(b); 
} 
+0

這正是我開始做。必須小心,IdList不會太長,因爲db可能不喜歡long sql。 – cs0815