0

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

但是,我不确定在 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。

还是应该首先不应该像那些调用那样成为 VM 的一部分?目前我还可以想象为每个 DB 表实现像 StaticHelpers 一样的方法,并使用像 GetAllUsers() 这样的方法。

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

public AllCustomersViewModel(CustomerRepository customerRepository)

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

4

1 回答 1

2

在 MSDN 上 DbContext 类的描述中,它声明“表示工作单元和存储库模式的组合”,因此它可以充当您的存储库层,尽管它不是必须的,而且它的目的是用于“工作单元”,它不适合为整个应用程序使用全局单元。除了为所有内容保留一个之外,还可能导致缓存数据和其他不良事物(内存使用等)出现问题。

希望这可以帮助。

于 2013-03-26T19:44:06.393 回答