对于一个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,我也会很高兴。
答案 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();
}
这个解决方案适合我,但我对此并不满意。