Mvvm 在哪里定义存储库?
我正在结合MVVM学习EF4.1,在其中一个教程中,他们创建了一个带有存储库对象的MainWindowViewModel,用于调用另一个视图模型EmployeeListViewModel。代码如下:Mvvm 在哪里定义存储库?,mvvm,entity-framework-4.1,repository,Mvvm,Entity Framework 4.1,Repository,我正在结合MVVM学习EF4.1,在其中一个教程中,他们创建了一个带有存储库对象的MainWindowViewModel,用于调用另一个视图模型EmployeeListViewModel。代码如下: public MainWindowViewModel() { IObjectContextAdapter adapter = ((IObjectContextAdapter)new SidekickEntities()); _vmRepository = new GenericRep
public MainWindowViewModel()
{
IObjectContextAdapter adapter = ((IObjectContextAdapter)new SidekickEntities());
_vmRepository = new GenericRepository(adapter.ObjectContext);
EmployeeListViewModel viewModel = new EmployeeListViewModel(_vmRepository);
this.ViewModels.Add(viewModel);
}
我对EF很陌生,但在每个单独的ViewModel中创建一个存储库似乎更干净一些。当所讨论的ViewModel不再使用时,存储库不会被清理,而不是将其保留到MainWindowViewModel关闭之前,还是会创建太多存储库实例 为每个ViewModel使用单独的上下文时会遇到的问题是,具有彼此链接的实体来自不同的上下文,因此在尝试更新某些内容时必须手动解决此问题,请参见 这与称为工作单元的模式有关 UoW帮助您封装应该一起工作的函数。在您的例子中,ObjectContext实现UoW模式,并在构造函数中传递给存储库
您应该在一起工作的函数之间共享ObjectContext,并将其视为一个工作单元。好的,谢谢。很高兴在我深入开发之前知道这一点!:
public EmployeeListViewModel(GenericRepository repository)
{
if (repository == null)
{
throw new ArgumentNullException("repository");
}
_employeeRepository = repository;
this.AllEmployees = new ObservableCollection<Employee>(_employeeRepository.GetAll<Employee>());
}
public MainWindowViewModel()
{
EmployeeListViewModel viewModel = new EmployeeListViewModel();
this.ViewModels.Add(viewModel);
}
public EmployeeListViewModel()
{
IObjectContextAdapter adapter = ((IObjectContextAdapter)new SidekickEntities());
_employeeRepository = new GenericRepository(adapter.ObjectContext);
this.AllEmployees = new ObservableCollection<Employee>(_employeeRepository.GetAll<Employee>());
}