2011-03-15 71 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(); 
    } 

该解决方案适用于我,但我并不完全满意。