EF4:ObjectContext终身?

时间:2011-03-24 02:26:07

标签: entity-framework entity-framework-4 repository

我正在开发一个使用Entity Framework 4和SQL Compact 4的WPF桌面应用程序。我见过两种截然不同的Repository类:

  • Repository实例化ObjectContext,在Repository被垃圾收集时被处理掉。 ObjectContext的生命周期与应用程序的生命周期相同。

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

这两种方法都被视为不良做法吗?是否存在任何绝对优势?这两种方法都被认为是最佳做法是否被开发人员广泛接受或使用?谢谢你的帮助。

2 个答案:

答案 0 :(得分:7)

最佳做法取决于您的用户将如何使用该应用程序: 以及您的应用程序的结构。

如果一次只有一个用户使用您的应用程序,您甚至可以将实体上下文创建为静态实例。

每个请求,每个线程,每个表单都可以使用

上下文。

了解详情:http://blogs.microsoft.co.il/blogs/gilf/archive/2010/02/07/entity-framework-context-lifetime-best-practices.aspx

答案 1 :(得分:7)

我原本以为在多次访问中打开ObjectContext会是不好的做法。一旦它被破坏,那么你需要回收并处理腐败。

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

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

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