LINQ による直接更新: 選択ステートメントのバイパス
SQL を使用する場合、条件文を使用して選択ステートメントを使用しない直接更新を作成できます。 LINQ の一般的なパターンには、エンティティの選択、変更、変更の送信が含まれます。
しかし、LINQ を使用して直接更新を実行し、実行を延期したい場合はどうすればよいでしょうか?クライアントへのデータ送信を回避し、SQL を直接実行することは可能ですか?
答えは「はい」です。 LINQ-to-SQL では、select ステートメントを必要とせずに update ステートメントを生成できます。これは、キー値を持つオブジェクトをコンテキストにアタッチし、そのプロパティを変更することで実現できます。
例:
Foo foo = new Foo { FooId = fooId }; // create obj and set keys context.Foos.Attach(foo); foo.Name = "test"; context.SubmitChanges();
Dbml 内のすべてのプロパティに対して UpdateCheck="Never" を設定することによって実現できます。ファイルを作成すると、最初に元のエンティティを選択せずに、単一の更新ステートメントが生成されます。
注意すべき点の 1 つは、プロパティを null に設定する場合は、次のことを行う必要があることです。オブジェクトを別の値で初期化し、LINQ が変更を検出できるようにします。例:
Foo foo = new Foo { FooId = fooId, Name = "###" }; ... foo.Name = null;
さらに、Dbml ファイルでプロパティを UpdateCheck="Always" に設定することで、更新中にタイムスタンプをチェックできます。これにより、更新ステートメントにタイムスタンプ値に基づく条件が確実に含まれるようになります。
以上がLINQ は select ステートメントを使用せずに直接 SQL 更新を実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。