Wpf 使用EF的存储库类应该只在构造函数中初始化上下文还是为每个方法初始化上下文?

Wpf 使用EF的存储库类应该只在构造函数中初始化上下文还是为每个方法初始化上下文?,wpf,entity-framework,mvvm,Wpf,Entity Framework,Mvvm,应该是这样吗 public class DataAccess { MyDbContext ctx; public DataAccess() { ctx = new MyDbContext(); } public List<entity> GetAll() { return ctx.entities.ToList(); } } 还是这个 public List<entity>

应该是这样吗

public class DataAccess
{
    MyDbContext ctx;

    public DataAccess()
    {
         ctx = new MyDbContext();
    }

    public List<entity> GetAll()
    {
         return ctx.entities.ToList();
    }
}
还是这个

public List<entity> GetAll()
{
    using (var ctx = new MyDbContext())
    {
        return ctx.entities.ToList();
    }
}
非常感谢,如果我的问题中有问题,请通知我,以便我可以改进它。

DbContext的最佳生存期取决于您的要求,可能因情况而异,但通常您应该更喜欢短生存期上下文示例代码中的第二个代码段:

实体框架的上下文将用作短期实例,以提供最佳性能体验

如果我有一个用于添加新项目的viewmodel和另一个用于显示所有或筛选项目的viewmodel,则第二个viewmodel的视图必须始终反映集合源中的任何更改,该更改是直接从viewmodel传递到viewmodel,还是从viewmodel传递到存储库再传递到第二个viewmodel


例如,第一个视图模型可以将新项添加到视图绑定到的第二个视图模型的ObservableCollection中。因此,它应该使用respository将新项添加到数据库中,并以某种方式将新实体对象添加到第二个视图模型的源集合中

你应该把问题分开,因为它们是两个完全不同的东西。好的:我会为它想出一个好的标题,然后我感谢你回答我的第二个问题,但如上所述,它确实不同于我的第一个问题和标题,所以90分钟后,我将再次发布:我仍然对如何在MVVM WPF应用程序中实现EF感到困惑