这是一个我正在寻找意见的问题。我正在开发一个同时使用NHibernate和EntityFramework的项目(这是设计,需要灵活性)。所以,我继续开始研究存储库模式,但遇到了一个轻微的困境。
基本上,我想知道你们对以下几个方面的看法:
存储库应该是单身吗? - 这将允许我保持会话打开,但与此同时,我认为它将保持连接打开数据库。对于NHibernate,ORM只能保证objet在同一个会话中是相同的。这对于简单编码来说是理想的,但是有一些方法可以使用密钥并覆盖GetHashCode和Equals方法来克服这种情况。
如果它不是单例(或者即使它是),我应该在使用它们后立即关闭连接吗?对于NHibernate,这意味着每次Repository为“Disposed”时关闭会话,这是在每次使用之后。
您是否为NHibernate或EF 4.0实现了存储库模式并找到了有用的想法?
答案 0 :(得分:4)
不要自己编写单例的创建(即单例模式本身),使用像StructureMap这样的IOC框架来处理对象的生命周期管理。
这个我们无法回答。如果它是单例,则它在内部管理的资源(如DB实时连接的连接池)方面必须是线程安全的。 Threadsafe代码并非易事。
这个我们无法回答。这取决于您如何使用您的模型。这还取决于您是否希望人们能够读取需要与数据库进行活动连接的DataReader。这也会影响延迟加载,这需要活动会话,这会成为数据绑定的噩梦。
以下是我为NH创建存储库模式时提出的所有问题:Creating a common generic and extensible NHiberate Repository version 2
答案 1 :(得分:0)
第一个问题, 是NHibernate吗?为什么不看一下将EF4与IoC一起使用,我最喜欢的是StructureMap,然后您不再需要担心使您的存储库单例,因为StructureMap提供了通过HttpContext,Hybrid通过请求保持范围打开的选项。您当然可以选择在您的存储库中使用Singleton模式我只是不会出售它在这种情况下是可行的选项。
希望这会让你感到困惑。