3

EntityFrameworkの変更を元に戻すにはいくつかの方法があります。

  • オブジェクトコンテキストの再作成
  • コンテキストから切り離す/アタッチする
  • 更新:context.MyEntity.Context.Refresh(RefreshMode.StoreWins、myobject);

アプリケーションにはタブ付きのインターフェイスがあり、1つのタブに別のエンティティオブジェクトが表示されます。ユーザーはタグをオブジェクトに追加できます(m:n関係)。見つけたすべてのことを試しましたが、ユーザーがm:n関係に加えた変更をEntityFrameworkで元に戻すことができませんでした。たとえば、ユーザーがタグを追加します(m:nオブジェクトが作成されます)。ユーザーが[キャンセル]をクリックすると、オブジェクトがデータベースに保存されます。

コンテキストを再作成すると、他のタブのデータが失われる可能性があります。Detach / AttachおよびRefresh()は、オブジェクト自体が変更され、オブジェクトのリストに追加/削除された関連オブジェクトがない場合にのみ機能します。

タブごとに異なるコンテキストオブジェクトを使用することを考えましたが、データが同期しなくなります(たとえば、ユーザーがリストをクリックして新しいタブが開きます。オブジェクトを変更した後、リストは更新されません。自動的)

4

1 に答える 1

2

EFには元に変更の変更はありません。現在の問題は、アプリケーションがどのように機能すると予想されるか、およびEFがどのように機能すると予想されるかということです。EFは作業単位として機能することが期待されています。多くの変更を加えて、それらを一緒に保存するか、一緒に破棄します。

変更の一部のみを元に戻す必要があるため、アプリケーションは明らかに異なるモデルを想定しています。これは、EFのコンテキストが処理することになっているものとは正確には異なります。このようなロジックはEFとは別に処理する必要があります=GUIはコンテキストにアタッチされていないオブジェクトで機能する必要があり、エンティティをアタッチして、ユーザーが結果を保存することを決定した場合にのみ変更を定義する必要があります。

コンテキストで部分的に元に戻すには、エントリを参照してObjectStateManager、作成された変更を元に戻す必要があります。変更された多対多の関係については、関係を表す状態エントリを見つけて、状態の変更を元に戻す必要があります。これらのエントリは、追加、削除、または変更されていない状態でのみ使用できます。削除済みを変更なしに戻すことはできますが、追加されたインスタンスを何らかの方法でデタッチまたは削除できるかどうかは現時点ではわかりません。

于 2012-08-07T10:28:31.533 に答える