|
|
1
2
好的,我将把这个作为一个答案发布,因为它主要是做我想要的。然而,我希望得到一些反馈,也可能是我迄今为止对解决方案的一个警告的答案:
然后创建了从IPagedList继承的基类:
NHPagedList下一步:
您会注意到,它将检查集合是否已初始化,以便我们知道何时检查数据库中的分页列表,或者何时只使用当前内存中的对象。 现在您可以开始了,只需将模型上当前的IList引用更改为IPagedList,然后使用下面的fluent NHibernate将NHibernate映射到新的自定义集合,就可以开始了。
这是这段代码的第一个版本,因此需要进行一些重构和修改才能使其完美。
|
|
|
2
2
您应该查看NHibernate的一个LINQ提供者。您需要的是一种延迟加载查询结果的方法。LINQ最大的功能就是它确实可以…延迟加载查询结果。当您实际构建一个查询时,实际上是在创建一个表达式树来表示您想要做的事情,以便以后可以实际执行。通过使用NHibernate的LINQ提供程序,您可以执行以下操作:
这种能力比查询一页结果要强大得多。扩展方法.Skip()和.Take()在所有IQueryable上都可用<T>和IEnumerable<T>对象,以及一大堆其他对象。此外,您还有.Where()、.Except()、.Join()以及更多。这使您能够,例如,.GetAll(),然后通过对.Where()的一个或多个调用过滤该查询的可能结果,以.Skip(…).Take(…)结束,在.ToList()或.ToArray()调用中以单个计算结束。 这需要您稍微更改您的域,并开始通过IQueryable<T>或IEnumerable<T>在IList的周围<T>,并且仅转换为IList<T>在您更高级别的“面向公众”服务中。 |
|
|
3
0
如果你要做这样的事情,我想不出一个办法,你可以“写”到页面集合,让NH持久化。分页的集合将是只读的。 http://www.acceptedeclectic.com/2007/12/generic-custom-nhibernate-collections.html 他正在包装PersistentGenericBag并添加一些ekstra方法,正如您所描述的。GetPagedList()可以使用一个条件来实现,该条件返回一个ReadOnlyCollection,也可以计数-当然返回一个long。GetAll()方法不是必需的,就我所见,它只是返回集合本身。 至于这是否是一个好主意,我确实认为是,如果你有很多收藏,这是一个实际问题。如果只是一个或两个collection,我会选择在实体上有一个方法,返回页面中的集合。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 8 月前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 8 月前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 8 月前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 8 月前 |