0

ツリービューをレンダリングするために使用するEFで正常に機能する自己参照テーブル構造があります。EFエンティティは次のようになり、構造全体を熱心にロードします。

class ListItem
{
  int Id;
  string Text;
  ListItem ParentItem;
  IList<ListItem> ChildItems;
}

次に、UIに機能を追加して、任意のノードに新しい子ノードを追加し、jQueryを使用してノードを再配置しました。更新された構造は、同じエンティティを使用してセッションに保存されます。

EFを使用して保存し直したい場合、次のような別のエンティティ内にあるため問題が発生しMainEntity、ツリーを更新するたびにこれを保存(更新)しています。

class MainEntity
{
  ..
  ..
  IList<ListItem> Tree;
}

セッションの値を使用してこのTreeプロパティを更新し、EFに保存するように指示するにはどうすればよいですか?その構造の親と子を新しい構造に一致するように変更するにはどうすればよいですか?

コマンドパターンを使用してUIのすべてのアクションを記録し、後で保存時にEFエンティティでそれらを再生することを考えていました。しかし、それはやり過ぎのように見えます:(

4

1 に答える 1

0

何日も無駄にさまざまなことを試した後、私はついにコマンドパターンを実装し、期待どおりに機能するようになりました。

UIアクションの追加、更新、削除、および並べ替えのために次のコマンドインターフェイスを実装し、セッションに存在するコレクションにそれらを詰め込みました。

public interface ITreeCommand
{
    void Execute(ICollection<ListItem> finalList, MainEntity source, ModelContainer db, ICollection<Guid> deletedIds);
}

次に、保存時に、必要なパラメーターを渡すためにこれらのコマンドを実行します。db.SaveChanges()すべてのexecuteメソッド実装内で呼び出す必要がありました。実行する前にこのリストをチェックすることで、不要な追加、更新、または並べ替えをスキップできるため、削除されたノードIDを個別に保持する必要がありました。

これがいつか誰かに役立つことを願っています。

于 2012-09-07T05:06:26.503 に答える