我目前正在编写我的第一个使用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)
尽管这必须是一个常见问题,但我发现对于较小的应用程序(最佳实践)如何解决此问题没有令人满意的答案?
答案 0 :(得分:2)
在MSDN上的DbContext类的描述中,它指出"Represents a combination of the Unit-Of-Work and Repository patterns",因此它可以充当您的存储库层,尽管它不需要,并且它旨在用于“工作单元” “这不适合整个应用程序使用全局的。除了保持一个单独的一切可能会导致缓存数据和其他不良事件(内存使用等等)的问题。
希望这有帮助。