2011-03-24 116 views
5

我开发使用实体框架4和SQL精简WPF的桌面应用程序4.我已经看到了两种截然不同的风格Repository类:EF4:ObjectContext生存期?

  • Repository实例化一个ObjectContext,其设置在Repository是垃圾回收。 ObjectContext的生命周期与应用程序的生命周期相同。

  • 单独的DataStoreManager类为应用程序的生命周期创建并保留ObjectContext。当需要存储库时,命令从DataStoreManager获取ObjectContext参考,并将其传递给New Repository的构造函数。 ObjectContext的生命周期是应用程序的生命周期。

这两种方法都被认为是不好的做法吗?是不是相对于另一个具有绝对优势?两种方法都被认为是最佳做法吗开发人员是否比其他人更广泛地接受或使用?谢谢你的帮助。

+0

第二种方法可以称为反模式。检查我的答案在这里:http://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling/3653392#3653392 – 2011-03-24 07:58:18

回答

7

我本来以为拿着ObjectContext的打开多个接入上是不好的做法。一旦它变得腐败,那么你将需要回收和处理腐败。

存储库模式更多用于抽象数据访问,但不一定映射到上下文的生命周期。

工作模式单元更多地是关于封装一个或多个数据库/存储库访问,即用例可能需要添加一个新的Blog,然后添加第一个默认文章,这可能需要调用两个存储库,此时您可能希望共享上下文并在事务中封装这两个命令。添加第二篇文章可能会在数小时后完成,并成为新的上下文/工作单元。

DJ在提及通常在应用程序级别设置的上下文生命周期时是正确的。

+1

转换为这一个接受的答案 - 共识似乎是有限寿命的对象上下文是更好的做法 – 2011-03-24 15:06:30