質問
私はSMALLINT SORTORDER場と店舗の写真というSQLテーブルを持っています。ユーザーは2枚の既存の写真の間(または最初の写真の前に)新しいレコードを配置する小数ソート順を指定して、新しい写真を挿入することができます。ソート順は、私は挿入が既存のレコードをシフトすることを検出したときので、私は1によってソート順をインクリメントする影響を受けるすべての写真を更新する必要があり、SMALLINTとして保存されます。
これは、ストアド・プロシージャで行うのは簡単ですが、私はLINQ to SQLはしてこれを実現するための最も効率的な方法を探しています。私は、クライアントまでのすべてのレコードを引き出し、それらを更新し、それらを提出する必要がある場合は、私はすでに非常に速く作業とされるストアドプロシージャに固執します。
ここでは、レコードをシフトT-SQLのです。
UPDATE Photo
SET SortOrder = SortOrder + 1
WHERE AlbumId = @AlbumId
AND SortOrder >= CEILING(@SortOrder)
レコードを取得することなく、LINQ to SQLの中に一括更新のこの種を行うための方法はありますか?
解決
SQLにLINQは、セット用のCUD文を実行しません。
他のヒント
私はこの男の仕事で多くの成功を持っていました: ます。http: //www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspxする
私は数ヶ月のために開発中でそれを使用してきた、これまでのところ、それはかなり良いされています。
はい、あなたは、あなたのオブジェクトをプルダウンそれらを操作し、戻ってそれらをプッシュする必要があると思います。
クライアントが新しい写真を押すと呼び出すための責任があることをSPROCを何かありますか?あなたは、あなたのアプリケーションが余分な(簡単に忘れ)ステップの直接の原因ではないので、代わりに、トリガーとしてそれを設定するためにも行う可能性があります。これは当然の複雑さのトレードオフと、好みの問題です。
1つのオプションは、ストアドプロシージャにあったSQL文字列を構築し、自分のDataContext.ExecuteQueryメソッドを介してそれを実行することです。このようにそれを行うと、フェッチされてからレコードを妨げるます。