2

ここに興味深い問題があります。指定されたテーブルに列 x、y、z が含まれていることだけを知っているが、コンパイル時にどのテーブルを扱っているかを知らないテーブル UPDATE を実行できる LINQ to SQL を使用してコードを記述する方法はありますか?

DBスキーマにいくつかの列を共有するいくつかのテーブルがあり、どのテーブルを扱っているかに関係なく、論理手順が同一のセットベースのUPDATE操作を適用する必要があります。

簡単な例を次に示します。隣接モデル階層を実装する 3 つのテーブルがあるとします (つまり、各行には主キー ID と自己参照の親 ID 列が含まれます)。各テーブルには、「無効」のブール フラグもあります。これらのエンティティのいずれかのインスタンスを無効にすると、子アイテムをカスケードする必要があります。

UPDATE MyTable SET 無効 = 1 WHERE ID = @ID または Parent_ID = @ID

エンティティごとにこの種の LINQ ステートメントを記述したくありません。DRY に違反しています。この例では些細なことのように思えるかもしれませんが、例が複雑になるにつれて、重複するコードの量が増えていきます。インターフェイスとおそらくジェネリックを使用してそれが可能であるに違いないと確信していますが、エレガントなソリューションを考え出すのに苦労しています。

4

3 に答える 3

1

エンティティの基本クラスを作成し、共通プロパティを仮想プロパティとしてそこに移動するだけです。エンティティでこれらのプロパティをオーバーライドし、列属性を指定します。詳細なを次に示します。

于 2009-03-31T13:51:33.633 に答える
1

LINQ to SQL クラスは、SQL に変換される IQuery インターフェイスをサポートする通常の .NET クラスです。(厳密には手振りではありません)

独自の IQuery 実装を作成し、適切なテーブルの生成された LINQ to SQL IQuery 実装を指すことができる場合があります。「TableName」というプロパティを追加し、それをサポートするために「Where」をオーバーライドします。

この回答は完全な解決策ではないかもしれませんが、正しい方向に向けられることを願っています.

于 2009-03-31T14:04:04.447 に答える