我正在开发一个使用Entity Framework 4和SQL Compact 4的WPF桌面应用程序。我见过两种截然不同的Repository
类:
Repository
实例化ObjectContext
,在Repository
被垃圾收集时被处理掉。 ObjectContext
的生命周期与应用程序的生命周期相同。
单独的DataStoreManager
类会为应用程序的生命周期创建并保留ObjectContext
。当需要存储库时,命令从ObjectContext
获取DataStoreManager
引用,并将其传递给New Repository的构造函数。 ObjectContext
的生命周期是应用程序的生命周期。
这两种方法都被视为不良做法吗?是否存在任何绝对优势?这两种方法都被认为是最佳做法是否被开发人员广泛接受或使用?谢谢你的帮助。
答案 0 :(得分:7)
最佳做法取决于您的用户将如何使用该应用程序: 以及您的应用程序的结构。
如果一次只有一个用户使用您的应用程序,您甚至可以将实体上下文创建为静态实例。
每个请求,每个线程,每个表单都可以使用上下文。
答案 1 :(得分:7)
我原本以为在多次访问中打开ObjectContext会是不好的做法。一旦它被破坏,那么你需要回收并处理腐败。
存储库模式更多用于抽象数据访问,但不一定映射到上下文的生命周期。
工作单元模式更多地是关于一个或多个数据库/存储库访问的封装,即用例可能让您添加新的博客然后添加第一个默认帖子,这可能需要调用两个存储库,此时您可能希望共享上下文并将这两个命令封装在事务中。添加第二篇文章可能会在几小时后完成,并成为新的上下文/工作单元。
DJ提到你通常在应用程序级别设置的上下文生命周期是正确的。