0

db-access に Entity Framework を使用するエディターを作成しました。エディターは、JavaScript を介して動作するクライアント側のエディターです。ユーザーが保存ボタンをクリックすると、JavaScript はデータを JSON 文字列として ASP.NET MVC メソッドを呼び出します。データは、ノードのリストを含むオブジェクトです。EF で継承を使用して、ノードを異なる型にすることができます。ブラウザーから送信された JSON は、MVC によって自動的に DTO オブジェクトに変換されます。次に、DTO オブジェクトに基づいて EF オブジェクトを作成します。私の質問は、変更をすべてのオブジェクトに保存するにはどうすればよいですか?

現在、私は次のことを行っています。

// Convert my DTO object to a EF db object
Document dbDoc = dtoDoc.ToEFDocument();

using (MyEntities db = new MyEntities())
{
    db.ApplyCurrentValues("Documents", doc);
    db.SaveChanges();
}

これは機能しますが、ドキュメント オブジェクトのプロパティのみを更新します (ノード コレクションで行われた変更は更新しません)。

これに対する簡単な解決策はありますか?

4

1 に答える 1

0

DTO は、ユーザーが行った変更に関する情報も追跡する必要があります。追跡する必要があります:

  • どのエンティティが更新されたか
  • 削除されたエンティティ
  • 追加されたエンティティ
  • 追加された独立した関連付け (多対多またはマップされた FK なしの 1 対多)
  • 削除された独立した関連付け

サーバーでこの情報を取得したら、それを使用して、データベースに保存するすべてのエンティティの状態を正しく設定する必要があります。EF でこれを行うための自動メカニズムはなく、ApplyCurrentValues(エンティティ グラフ全体ではなく) 単一のエンティティに対してのみ機能します。

変更に関する情報なしでこれを行うには、通常、DTO から切断されたエンティティを作成する代わりに、変更されたすべてのデータをデータベースからロードし、DTO から更新する必要があります。

于 2012-12-03T10:57:13.337 に答える