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

时间:2017-08-29 10:19:00

标签: 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> GetAll()
{
    using (var ctx = new MyDbContext())
    {
        return ctx.entities.ToList();
    }
}

非常感谢,如果我的问题出现问题,请通知我,以便我可以改进。

1 个答案:

答案 0 :(得分:1)

DbContext的最佳生命周期取决于您的要求,可能因具体情况而异,但一般情况下您应该更喜欢短期内容(示例代码中的第二个代码段):

  

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

https://msdn.microsoft.com/en-gb/data/hh949853.aspx#9

  

如果我有一个用于添加新项的viewmodel和另一个用于显示所有或已过滤项的viewmodel(第二个viewmodel的视图必须始终反映集合源中的任何更改),是否应将更改从viewmodel传递到viewmodel直接,或viewmodel到存储库到第二个viewmodel?

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