3

smallintSortOrderフィールドを持つ写真を格納するSQLテーブルがあります。ユーザーは、新しい写真を挿入し、10進数の並べ替え順序を指定して、2つの既存の写真の間(または最初の写真の前)に新しいレコードを配置できます。SortOrderはsmallintとして保存されるため、挿入によって既存のレコードがシフトすることを検出したら、影響を受けるすべての写真を更新して、SortOrderを1つインクリメントする必要があります。

これはストアドプロシージャで簡単に実行できますが、LinqtoSQLを使用してこれを実現するための最も効率的な方法を探しています。すべてのレコードをクライアントにプルダウンし、更新してから送信する必要がある場合は、すでに機能していて非常に高速なストアドプロシージャを使用します。

レコードをシフトするT-SQLは次のとおりです。

    UPDATE      Photo
    SET         SortOrder = SortOrder + 1
    WHERE       AlbumId = @AlbumId
    AND         SortOrder >= CEILING(@SortOrder)

レコードをフェッチせずに、LinqからSQLへのこの種の一括更新を行う方法はありますか?

4

4 に答える 4

6

LINQ to SQLはセットに対してCUDステートメントを実行しないため、シナリオに最適であるため、既存の実装を使用してください。

于 2010-01-25T06:09:27.677 に答える
3

私はこの人たちの仕事で多くの成功を収めました: http ://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx

開発で使用してから数か月しか経っていませんが、これまでのところかなり良好です。

于 2010-01-25T08:47:18.547 に答える
1

はい、オブジェクトをプルダウンして操作し、押し戻す必要があります。

sprocは、新しい写真をプッシュするときにクライアントが呼び出す責任があるものですか?代わりに、トリガーとして設定することをお勧めします。そのため、アプリケーションは、余分な(簡単に忘れられる)ステップに対して直接責任を負いません。もちろん、これは複雑さのトレードオフであり、好みの問題です。

于 2010-01-25T06:25:05.203 に答える
0

1つのオプションは、ストアドプロシージャにあったSQL文字列を作成し、DataContext.ExecuteQueryメソッドを介して実行することです。このようにすると、レコードがフェッチされなくなります。

于 2010-01-25T06:06:36.057 に答える