【问题标题】:Repository Pattern with Entity Framework 3.5 and MVVM - Should I share the same context everywhere?Entity Framework 3.5 和 MVVM 的存储库模式 - 我应该在任何地方共享相同的上下文吗?
【发布时间】:2010-04-14 09:49:10
【问题描述】:
我正在开发Database File System。
我正在使用 -
- .Net 框架 3.5
- 实体框架 3.5
- 带有 MVVM 模式的 WPF
该项目跨越多个程序集,每个程序集都使用相同的模型。
一个程序集,我们称之为“服务器”,仅使用 EF 向数据库添加数据,即相同的模型。其他程序集(包括 UI)都读取和写入数据。服务器所做的更改应立即反映在其他程序中程序集。
数据库包含自引用表,其中每个实体可以有一个或没有父级和(可能是)一些子级。我想使用存储库模式,它也可以提供一些机制来处理这种分层性质。
我已经在Code Project 上阅读了这篇文章。它在各处共享相同的上下文(实体)。
我的问题是 - 我应该在任何地方共享相同的上下文吗?这样做有什么好处和坏处?
【问题讨论】:
标签:
c#
wpf
entity-framework
mvvm
repository-pattern
【解决方案2】:
据我了解,objectcontext 应该在需要时使用,然后丢弃。所以你可能想把它包装在一个工作单元接口中,以及一个工作单元工厂,以便在需要时创建工作单元。
就您关于反映“程序集”变化的实体的问题而言。问题是您的对象不存在于程序集中。它们存在于记忆中。
因此,为了使更改反映在整个应用程序中,您要么必须在整个应用程序中维护对同一对象的引用。或者您可以实现一个通知系统,以便当一个实体或一组实体发生更改时,您的应用程序的另一端会通知并刷新数据。
保持单个上下文活动的缺点是每次对对象上下文进行查询时,它都会随着从数据库加载的实体而增长。在长时间运行的应用程序中,这会转化为大量内存消耗。
每次都使用全新上下文的不利之处在于,对存储库的任何调用都会为您提供一份新的数据副本。现在这应该不是问题,因为 repo 唯一关心的应该是保存/加载数据;不处理跨层的并发或数据重复