C# 使用EntityFramework3.5和MVVM的存储库模式-我应该在任何地方共享相同的上下文吗?

C# 使用EntityFramework3.5和MVVM的存储库模式-我应该在任何地方共享相同的上下文吗?,c#,wpf,entity-framework,mvvm,repository-pattern,C#,Wpf,Entity Framework,Mvvm,Repository Pattern,我正在开发一个新的应用程序。 我正在使用- .Net framework 3.5 实体框架3.5 具有MVVM模式的WPF 项目跨越多个部件,每个部件使用相同的模型 一个程序集(我们称之为服务器)仅使用EF(即相同的模型)向数据库添加数据。包括UI在内的其他程序集都读取和写入数据。服务器所做的更改应立即反映在其他程序集中 数据库包含自引用表,其中每个实体可以有单个父实体,也可以没有父实体,也可以是一些子实体。我想使用repository模式,它还可以提供一些机制来处理这种层次结构 我已经读过了。

我正在开发一个新的应用程序。 我正在使用-

.Net framework 3.5 实体框架3.5 具有MVVM模式的WPF 项目跨越多个部件,每个部件使用相同的模型

一个程序集(我们称之为服务器)仅使用EF(即相同的模型)向数据库添加数据。包括UI在内的其他程序集都读取和写入数据。服务器所做的更改应立即反映在其他程序集中

数据库包含自引用表,其中每个实体可以有单个父实体,也可以没有父实体,也可以是一些子实体。我想使用repository模式,它还可以提供一些机制来处理这种层次结构

我已经读过了。它在所有地方共享相同的上下文


我的问题是——我是否应该在所有地方共享相同的上下文?这样做的优点和缺点是什么?

的BookLibrary示例展示了如何将WPF MVVM和Entity Framework结合使用。它将层分离为单独的组件


也许这就是你想要的。

据我所知,objectcontext应该在需要时使用,然后扔掉。因此,您可能希望将其包装在工作单元界面中,以及工作单元工厂中,以便在需要时创建工作单元

至于您关于反映跨程序集更改的实体的问题。问题是您的对象不存在于程序集中。它们存在于记忆中

因此,为了在整个应用程序中反映更改,您必须在整个应用程序中保留对同一对象的引用。或者,您可以实施一个通知系统,以便在实体或实体集合发生更改时,应用程序的另一端会通知并刷新数据

保持单个上下文处于活动状态的缺点是,每次查询对象上下文时,它都会随着从数据库加载的实体而增长。在长时间运行的应用程序中,这会导致大量内存消耗

每次使用全新上下文的缺点是,任何对回购协议的调用都会给你一份新的数据副本。现在这不应该是一个问题,因为回购的唯一关注点应该是保存/加载数据;不处理跨层的并发或数据复制

重复,多次重复: