ViewModel中的ObjectContext(EF + MVVM)

时间:2013-03-26 19:22:45

标签: wpf entity-framework mvvm viewmodel objectcontext

我目前正在编写我的第一个使用EntityFramework进行数据访问的MVVM应用程序。 应用程序非常依赖底层数据库,并且在许多情况下必须向数据库添加新数据。

但是,我不确定在ViewModel中调用ObjectContext是否是个好主意。 例如

public class SomeViewModel : ViewModelBase
{
    public IEnumerable<User> AllUsers { get; private set; }

    private void SomeMethod()
    {
        var __entities = new DatabaseEntities();
        AllUsers = __entities.Users.Where(...).ToList();
    }

}

我见过这样的解决方案,但是有一些问题随之而来。 例如,ObjectContext实际存在多长时间,或者是否应该更喜欢单个全局可访问的ObjectContext。

或者应该首先调用那些不属于虚拟机的人? 目前我还可以想象为每个数据库表实现类似StaticHelpers并使用像GetAllUsers()这样的方法。

在Josh Smith的关于MVVM的示例应用程序中,他使用了在每个VM的构造函数中注入的Repository。

public AllCustomersViewModel(CustomerRepository customerRepository)

尽管这必须是一个常见问题,但我发现对于较小的应用程序(最佳实践)如何解决此问题没有令人满意的答案?

1 个答案:

答案 0 :(得分:2)

在MSDN上的DbContext类的描述中,它指出"Represents a combination of the Unit-Of-Work and Repository patterns",因此它可以充当您的存储库层,尽管它不需要,并且它旨在用于“工作单元” “这不适合整个应用程序使用全局的。除了保持一个单独的一切可能会导致缓存数据和其他不良事件(内存使用等等)的问题。

希望这有帮助。

相关问题