0

私はここで漠然としているかもしれませんが、次のようなことができるように、セットベースのヘルパー操作をlinqに配置するのに最適な場所を探しています。

db.Selections.ClearTemporary()

次のようなことをします

db.DeleteAllOnSubmit(db.Selections.Where(s => s.Temporary))

私ができる最善の方法を拡張する方法を理解できるのでTable<Selection>、Selection の部分クラス (Ruby と同様) で静的メソッドを作成することですが、次のように datacontext を渡す必要があります。

Selection.ClearTemporary(MyDataContext)

セットベースの操作を行うための 2 つの規則があり、データ コンテキストを静的クラスに渡す必要があるため、この種の処理は最悪です。

私は他の人がヘルパーメソッドをデータコンテキストの一部に積み上げることを推奨しているのを見てきました;

myDataContext.ClearTemporarySelections();

しかし、これにより、DCはまとまりのある操作のゴミ捨て場になると思います。

確かに私は何かが欠けています。そうだといい。コンベンションは何ですか?

4

2 に答える 2

2
public static class LinqExtensions
{
  public static void Clear<T>(this Table<T> t, Expression<Func<T,bool>> pred)
  {
    t.DeleteAllOnSubmit(t.Where(pred));
  }
}

使用法:

db.Selections.Clear(x => x.Temporary);

必要に応じて、DataContextから にアクセスできますTable<T>

于 2010-03-30T08:53:37.557 に答える
0

ネストされたクラスをデータコンテキストのパーシャルとして作成することと、ネストされたクラスを初期化して返すゲッターを作成することを考えています。

public SelectionsHelperClass SelectionsHelper {
  get {
    return new SelectionsHelperClass(Selections)
  }
}

このようにdb.SelectionsHelper.ClearTemporary()して、選択に固有のセットベースの操作(コレクション操作)を論理的にまとめながら、コンテキストを渡すことなく実行できます。私はこれをテストしていません。

私が言及するのを忘れたのは、これらのヘルパーが必要な理由は、asp mvcアプリのすべてではないが一部のコントローラーによって頻繁に共有されるためであり、それらをリファクタリングする場所も探しています。

于 2010-03-30T22:48:57.637 に答える