2014-12-08 1 views
1

DbSet <> .Local에서 반환 한 ObservableCollection에 바인딩 된 DataGrid가있는 WPF MVVM 응용 프로그램이 있습니다. 그리드는 데이터베이스의 내용을 올바르게 표시하고 그리드를 변경하면 ObservableCollection이 변경되지만 데이터베이스에는 변경 사항이 다시 저장되지 않습니다.DbSet <>. ObservableCollection이 EF 컨텍스트 데이터베이스에 저장되지 않음

Context.cs

public class AppContext: DbContext 
{ 
    public AppContext() : base("name=DefaultConnection") 
    { 

    } 

    public DbSet<Field> Fields { get; set; } 
} 

ViewModel.cs 내가 ObservableCollection에 변경 사항이 자동으로 데이터베이스에 쓸 것이라고 생각했다

public class EditorViewModel : NotificationObject 
{ 
    private ObservableCollection<MyEntity> _myEntities; 
    private string _message; 

    public EditorViewModel() 
    { 
     var db = new AppContext(); 
     db.MyEntities.Load(); 

     this.MyEntities = db.MyEntities.Local; 
    } 

    public ObservableCollection<MyEntity> MyEntities 
    { 
     get 
     { 
      return _myEntities; 
     } 
     set 
     { 
      if (_myEntities != value) 
      { 
       _myEntities = value; 
       RaisePropertyChanged("MyEntities"); 
      } 
     } 
    } 
} 

? 아니면 SaveChanges를 어딘가에 호출해야합니까?

+0

슬픈 당신에게 알려주지 만 프로그래밍은 마술을 포함하지 않습니다. 개체의 상태를 추적하고 사용자가 변경했는지 확인한 다음 변경 내용을 저장하지 않고 저장할지 여부를 결정한 다음 데이터베이스에 다시 써야합니다. 아무도 당신을 위해 그렇게하지 않을 것입니다. – Will

+0

@Will : "충분히 고급 기술은 마법과 구별 할 수 없습니다." EF 실체를 뒷받침하는 첨단 기술이 처음 만났을 때 할 수있는 일과 할 수없는 일을 해결하는 것은 분명 까다로울 수 있습니다. 아마도 이것은 당신이 얻을 수있는 마법이 필요하다고 제안하는 것들 중 일부를 수행한다는 사실에 의해 잘 설명 될 것입니다 ... –

답변

1

그래서 답은 DbSet <> .Local을 사용하면 ObservableCollection을 컨텍스트와 동기화 된 상태로 유지하므로 컨텍스트에서 SaveChanges를 호출하여 데이터베이스에 다시 기록하면됩니다.

http://msdn.microsoft.com/en-gb/data/jj592872.aspx

관련 문제