![]() |
1
12
我一直在想一个解决类似问题的办法。
可以使用
因此,例如(我在filtercollection中的查询可能有点不对劲,但您应该明白这一点):
不过,这有一个问题:
不幸的是,我不认为有任何方法可以得到你想要的与nhibernate的盒子。如果你想试试的话,你可以假装一下,但他们对我来说似乎是一败涂地: 添加一个方法或属性,该方法或属性在封面下返回一个linq to nhibernate可用于此工具架的IQueryable :
如果有人这样消费:
讨厌!您正在通过您的域模型释放您的持久性需求!也许你可以通过让一个存储库发出iqueryable(在运行时实际上是linq to nhibernate)来减少一点:
还是挺无聊的。 创建您自己的自定义集合类型(可能是一个iqueryable实现),它包装实际图书的私有字段,并将nhibernate映射到该字段 . 但是,使用isession.createfilter可能是一项困难的任务。您必须考虑“发现”当前会话,将linq表达式转换为可以在createfilter中使用的内容,等等。另外,您的业务逻辑仍然依赖于nhibernate。 在这一点上没有什么能真正满足。在nhibernate可以为您对一个集合进行linq之前,您最好像已经建议的那样正常地查询您的图书存储库,即使它看起来没有那么性感或最佳。 |
![]() |
2
3
我倾向于这样想: 聚合根是一致性的边界,因此如果shelf需要在它包含的图书上强制执行某种一致性策略,那么它应该是聚合根。 在这种情况下,它应该收藏一套书。 如果您不需要以任何方式从书架到书本强制实现一致性,那么我将考虑删除set/collection属性并将这些查询移到存储库中。 另外,由于分页和过滤很可能与您的域逻辑没有任何关系,所以它很可能用于表示。 然后我会考虑为它制作一些特殊的视图,而不是将表示工具添加到我的存储库中。 例如
这种查询可以返回投影和/或作为普通sql等进行优化。 它们很可能是特定于gui中的某个视图或报表的。 这样你的领域将只关注领域概念。 |
![]() |
3
1
也许你应该给 Nhibernate Linq 尝试一下。它允许您使用IQueryable并执行以下操作:
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 7 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 7 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 7 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 7 月前 |