1
在NHibernate中處理代碼端的一對多的正確方法是什麼?請記住我們的集合可能很大(可以說400 000引用)NHibernate - 如何正確處理代碼中的一對多引用
目前在我的申請,我處理他們的ISet這樣:
public class Questionnaire: BaseDatabaseModel{
public Questionnaire()
{
_questions = new HashSet<Question>()
}
private readonly ISet<Question> _questions;
public virtual IEnumerable<Question> Questions{
get{return _questions;}
}
public virtual void AddQuestion(Question q){
if(_questions.Add(q)){
q.Questionnaire = this;
}
}
public virtual void RemoveQuestion(Question q){
if(_questions.Remove(q)){
q.Questionnaire = null;
}
}
}
public class Question: BaseDatabaseModel{
private Questionnaire _questionnaire;
public virtual Questionnaire Questionnaire {
get{
return _questionnaire;
}
set{
if (_questionnaire.IsNotNull() && _questionnaire != value)
{
// remove previous reference since it changed
_questionnaire.RemoveQuestion(this);
}
if (value.IsNotNull())
{
// Add new reference if not null
value.AddQuestion(this);
}
// Set value
_questionnaire = value;
}
}
}
這個偉大的工程,以確保實體在我的會話引用總是正確的,問題是,當我的收藏是未初始化並設置爲lazyload,nhibernate會初始化整個集合以添加或刪除我的實體,導致某些情況下性能較差(主要是wh en在過載集合上使用過濾器)
什麼是最好的/推薦的方式來處理這種情況?
我忘了提及,但我也使用NHibernate Envers,它需要映射參考。我認爲我讀了一些地方,我們可以處理像這樣的情況,只需使用反向關係來處理孩子的保存,而不必將關係添加到父項。這樣我就不需要初始化父項。我不喜歡這件事的是,如果我們忘記我們沒有添加對父對象的引用,並且仍然在內存中處理實例,我們可以插入一些錯誤。 – 2014-10-31 13:05:11
在我看來,所以你成爲用戶的分頁收集表單。 因爲這些數據太多而無法顯示它們。 因此,從孩子寫入並向需要父母的工廠添加方法不會成爲問題。 – user1618077 2014-10-31 22:20:37