0

Entity Framework 5 Code First (.Net 4.5) を使用するように、型指定されたデータセット ベースの WPF アプリを移行しています。

現在、DataSet からのデータを使用してモデルをロードしています。次に、モデル フィールドが XAML DataGrid にバインドされます。モデル内の ObservableCollections と INotifyPropertyChanged から派生したドメイン オブジェクトの組み合わせを使用して、コレクション レベルとドメイン オブジェクト レベルで実行されている CRUD 操作を取得し、それに応じて動作させることができます。

public class DomainObject : INotifyPropertyChanged
{
  public DataRowState State;
 ...
} 

public class Model
{
  private ObservableCollection<DomainObject> _family = new ObservableCollection<DomainObject>();

  public Model()
  {
    List<DomainObject> objs = DS.GetObjects();
    foreach ( var obj on objs )
    {
     obj.PropertyChanged += OnObjectChanged;       
     _family.Add(obj);
    }

    _family.CollectionChanged += OnCollectionChanged;
  }

 void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
  // do stuff against DataSet based on e.Action
  ...
 }

 private void OnObjectChanged(object sender, PropertyChangedEventArgs e)
 {
   // do stuff against DataSet based on sender's (DomainObject) State property.
   ...
 }
}

私の現在の実装では、ユーザーがSaveボタンを押したときにデータベースに書き込む前に、データセット内の CRUD 操作を疑似バッチアップすることができます。または、キャンセルが押された場合は DataSet が破棄されます。

モデルを作成するために DataSet を使用した場合と同様に、EF DbContext がそれを使用することは許容されるパターンですか? オブジェクトの更新を保存できると期待する場合、コンテキストはモデルの存続期間中存続する必要があるようです。

ご指導ありがとうございます。コーリー。

4

1 に答える 1

0

あなたが求めているのは、DbContextを使用したUndo / Redoの実装だと思います。そのためには、この記事をチェックしてください。WPFを使用しているので、このメカニズムにはIEditableObjectインターフェイスを使用してみてください。一方、DbContextは、そのコンテキストに変更を加えた後で変更の保存を呼び出すまで存続する必要があります。

于 2013-03-10T22:57:05.423 に答える