ORM存储库模式

时间:2011-03-01 20:25:23

标签: c# .net nhibernate entity-framework design-patterns

这是一个我正在寻找意见的问题。我正在开发一个同时使用NHibernate和EntityFramework的项目(这是设计,需要灵活性)。所以,我继续开始研究存储库模式,但遇到了一个轻微的困境。

基本上,我想知道你们对以下几个方面的看法:

  1. 存储库应该是单身吗? - 这将允许我保持会话打开,但与此同时,我认为它将保持连接打开数据库。对于NHibernate,ORM只能保证objet在同一个会话中是相同的。这对于简单编码来说是理想的,但是有一些方法可以使用密钥并覆盖GetHashCode和Equals方法来克服这种情况。

  2. 如果它不是单例(或者即使它是),我应该在使用它们后立即关闭连接吗?对于NHibernate,这意味着每次Repository为“Disposed”时关闭会话,这是在每次使用之后。

  3. 您是否为NHibernate或EF 4.0实现了存储库模式并找到了有用的想法?

2 个答案:

答案 0 :(得分:4)

不要自己编写单例的创建(即单例模式本身),使用像StructureMap这样的IOC框架来处理对象的生命周期管理。

  1. 这个我们无法回答。如果它是单例,则它在内部管理的资源(如DB实时连接的连接池)方面必须是线程安全的。 Threadsafe代码并非易事。

  2. 这个我们无法回答。这取决于您如何使用您的模型。这还取决于您是否希望人们能够读取需要与数据库进行活动连接的DataReader。这也会影响延迟加载,这需要活动会话,这会成为数据绑定的噩梦。

  3. 以下是我为NH创建存储库模式时提出的所有问题:Creating a common generic and extensible NHiberate Repository version 2

答案 1 :(得分:0)

第一个问题, 是NHibernate吗?为什么不看一下将EF4与IoC一起使用,我最喜欢的是StructureMap,然后您不再需要担心使您的存储库单例,因为StructureMap提供了通过HttpContext,Hybrid通过请求保持范围打开的选项。您当然可以选择在您的存储库中使用Singleton模式我只是不会出售它在这种情况下是可行的选项。

希望这会让你感到困惑。