2011-12-06 7 views
0

MVVM과 함께 EF4.1을 배우고 있으며이 튜토리얼 중 하나에서 다른보기 모델 (EmployeeListViewModel)을 호출 할 때 사용하는 저장소 객체가있는 MainWindowViewModel을 작성합니다. 여기 코드는 다음과 같습니다저장소를 정의 할 위치는 어디입니까?

public MainWindowViewModel() 
{ 
    IObjectContextAdapter adapter = ((IObjectContextAdapter)new SidekickEntities()); 
    _vmRepository = new GenericRepository(adapter.ObjectContext); 
    EmployeeListViewModel viewModel = new EmployeeListViewModel(_vmRepository); 
    this.ViewModels.Add(viewModel); 
} 


public EmployeeListViewModel(GenericRepository repository) 
{ 

    if (repository == null) 
    { 
     throw new ArgumentNullException("repository"); 
    } 

    _employeeRepository = repository; 
    this.AllEmployees = new ObservableCollection<Employee>(_employeeRepository.GetAll<Employee>()); 
} 

내가 왜 저장소가 MainWindowViewModel에서 생성 된 후 EmployeeListViewModel에 전달 궁금?

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>()); 
} 

내가 EF 꽤 새로운 오전하지만 각각 별도의 뷰 모델에 저장소를 작성하는 작은 청소기를 보인다 : 왜 그냥이 같은 EmployeeListViewModel의 저장소를 만들 수 없습니다. 문제의 ViewModel이 MainWindowViewModel을 닫을 때까지 유지하지 않고 더 이상 사용되지 않거나 너무 많은 저장소 인스턴스를 만들 때 저장소를 정리하지 않겠습니까?

답변

0

각 뷰 모델에 대한 별도의 컨텍스트를 사용하는 경우에 실행됩니다 문제는 당신이 뭔가를 업데이트 할 때 수동으로 해결해야 할 것이다, 그래서 서로에 대한 링크가 실체가 다른 문맥에서 온 것입니다

( Attaching and Detaching Objects 참조)

이것은 Unit Of Work라는 패턴과 관련이 있습니다.

UoW는 함께 작동해야하는 기능을 캡슐화하는 데 도움이됩니다. 귀하의 경우에는 ObjectContext가 UoW 패턴을 구현하고 생성자의 저장소로 전달됩니다.

함께 작업하고 하나의 작업 단위로 간주되어야하는 함수간에 ObjectContext를 공유해야합니다.

+0

감사합니다. 다행히 개발하기에 앞서 알기 때문에 다행입니다! :) – BrianKE

관련 문제