Nhibernate+Repository模式应该采用哪种推荐方法?
关于这个问题,有很多不同的文章和意见,我不确定应该选择哪个路径。例如,这篇冗长的文章提供了Query对象的示例,但每个具体的Repository在其构造函数中都接受一个ISession。我在业务层(BL)中应该关心NH sessions吗?
创建一堆具有一堆特定方法的repositories?
显然,这太麻烦了,因为BL现在“允许”认识NHibernate(Repository是新的Singleton)。创建单一的通用repository,但公开IQueriable<T>并在BL中使用LINQ
时不时会有一些查询,LINQ-to-NHibernate无法处理(或者我需要手动调整SQL,一百次查询中只需一次)。这很容易通过自定义repo方法实现,但对于依赖LINQ的代码来说几乎不可能。而只是因为LINQ在某些情况下失效而同时使用两者是毫无意义的。Query对象?
QueryOver
也是NH特有的,这意味着BL再次认识了DAL的实现。其他方法?
显然,我需要在某个地方管理事务,也许可以使用Unit-of-work模式(虽然也有很多不同的实现)。
ICriteria
这样的东西,以及严格与数据访问相关的类。不是实体。如果我抱怨在BL中引用实体,那就没有多大意义了,对吧? :) - doe