NHibernate延迟加载

时间:2011-03-15 18:17:49

标签: nhibernate jqgrid lazy-loading jqgrid-asp.net

对于一个ASP.Net项目我正在使用(Fluent)NHibernate用于持久化,而JQGrid用于在表中显示数据。但是当我想使用JQGrid的AutoComplete功能时,我在获取AJAX请求中的数据时得到System.ArgumentException: Column 'HibernateLazyInitializer' does not belong with this table.。 但是这种错误只是偶尔发生,并且当列表中使用某种代理类时。因此我认为它与NHibernate的延迟加载有关。

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,我也会很高兴。

1 个答案:

答案 0 :(得分: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();
  }

这个解决方案适合我,但我对此并不满意。

相关问题