1

对于 ASP.Net 项目,我使用 (Fluent) NHibernate 进行持久性,使用 JQGrid 显示表格中的数据。但是当我想使用 JQGrid 的自动完成功能时,我会System.ArgumentException: Column 'HibernateLazyInitializer' does not belong with this table.在 AJAX 请求中获取数据。但是这个错误只是偶尔发生,并且在列表中使用了某种代理类时。因此我认为这与 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 的好教程,我也会很高兴。

4

1 回答 1

1

我以不同的方式解决了这个问题。现在我将域对象转换为 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();
  }

该解决方案对我有用,但我对此并不完全满意。

于 2011-03-18T17:05:30.623 回答