2011-03-15 68 views
1

對於一個ASP.Net項目我使用(流利)NHibernate的持久性和JQGrid顯示錶中的數據。但是當我想使用JQGrid的自動完成功能時,我在獲取AJAX請求中的數據時獲得了System.ArgumentException: Column 'HibernateLazyInitializer' does not belong with this table.。 但是這個錯誤只會偶爾出現,並且在列表中使用某種代理類時。所以我認爲它對NHibernate的延遲有一些幫助。NHibernate LazyLoading

protected new void Page_Load(object sender, EventArgs e) 
    { 
    base.Page_Load(sender, e); 
    _jqAutoComplete.DataSource = Session.CreateCriteria<Domain.Brand>() 
      .List<Domain.Brand>(); 
    _jqAutoComplete.DataBind(); 
    } 

通常惰性加載是一個很酷的功能。只有在這種情況下,它會導致錯誤,因此我不想在整個項目中將其禁用。那麼,在這種情況下,是否有辦法修改CreateCriteria,以便不使用LazyLoading但是EagerLoading? 還是有什麼我失蹤? 如果有一個很好的理解LazyLoading的教程,我也會很高興。

+0

你的意思是哪個「自動完成」功能以及如何使用它?那是'_jqAutoComplete'對象?您是否使用http://www.trirand.net/的jqGrid的商業版本? – Oleg 2011-03-15 18:39:16

+0

是的。我使用了名爲'Trirand.Web.UI.WebControls.JQAutoComplete'的類的商業版本。 – Towa 2011-03-15 19:11:14

+0

您是否試圖在[trirand.net論壇](http://www.trirand.net/forum/)中發佈該問題? – Oleg 2011-03-15 19:21:14

回答

1

我以不同的方式解決了這個問題。現在我將Domain-Object轉換爲ViewModel中相應的對象。我使用ValueInjecter來完成映射。

protected new void Page_Load(object sender, EventArgs e) 
    { 
    base.Page_Load(sender, e); 

    var objList = service.getList<Domain.Brand>(); 
    IList<V> list = new List<ViewModel.Brand>(); 

    foreach (var el in objList) 
    { 
     var brand = new ViewModel.Brand(); 
     list.Add(brand.InjectFrom<FlatLoopValueInjection>(el)); 
    } 

    _jqAutoComplete.DataSource = list; 
    _jqAutoComplete.DataBind(); 
    } 

該解決方案適用於我,但我並不完全滿意。