EF4:ObjectContext的生命周期?

5
我正在开发一个使用Entity Framework 4和SQL Compact 4的WPF桌面应用程序。我见过两种截然不同的仓储类Repository风格:
  • Repository实例化一个ObjectContext,当Repository被垃圾回收时,ObjectContext也会被处理。 ObjectContext的生命周期与应用程序的生命周期相同。

  • 一个单独的DataStoreManager类在应用程序的整个生命周期中创建并保存一个ObjectContext。 当需要仓储库时,一个命令从DataStoreManager获取ObjectContext引用,并将其传递给新仓储库的构造函数。 ObjectContext的生命周期与应用程序的生命周期相同。

这两种方法中是否有任何一种被认为是不好的做法? 是否有绝对优势? 是否有最佳实践? 是否有一种方法比另一种更受开发人员欢迎或使用? 谢谢您的帮助。


第二种方法可以称为反模式。在这里检查我的答案:https://dev59.com/oHA65IYBdhLWcg3wvxaE#3653392 - Ladislav Mrnka
2个回答

7

7

我认为在多次访问中保持ObjectContext打开状态是不好的实践。一旦它变得损坏,您就需要重新启动并处理损坏。

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

工作单元模式更多地涉及一个或多个数据库/存储库访问的封装,即一个用例可能会让您添加一个新博客,然后添加第一个默认帖子,这可能需要调用两个存储库,在这一点上,您可能想共享上下文并将这两个命令封装在一个事务中。添加第二个帖子可能会在几个小时后完成,并且是一个新的上下文/工作单位。

DJ在提到上下文生命周期方面是正确的,您通常会在应用程序级别设置它们。


1
将接受的答案切换为此答案——共识似乎是有限生命周期对象上下文是更好的实践。 - David Veeneman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接