在Linq to SQL中执行条件批量更新

时间:2010-01-25 05:59:01

标签: linq-to-sql bulk

我有一个SQL表,用于存储带有smallint SortOrder字段的照片。用户可以插入新照片,指定小数排序顺序,将新记录放在2张现有照片之间(或第一张照片之前)。 SortOrder将存储为smallint,因此当我检测到插入将移动现有记录时,我需要更新所有受影响的照片以将SortOrder增加1。

这在存储过程中很容易实现,但我正在寻找使用Linq to SQL实现此目的的最有效方法。如果我必须将所有记录下载到客户端,更新它们,然后提交它们,那么我将坚持使用已经工作且速度非常快的存储过程。

这是改变记录的T-SQL:

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

有没有办法在Linq to SQL中进行这种批量更新而无需获取记录?

4 个答案:

答案 0 :(得分:6)

LINQ to SQL不会对集合执行CUD语句,因此请坚持使用现有的实现,因为它在您的方案中是最好的。

答案 1 :(得分:3)

我和这些家伙的工作取得了很大的成功: http://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx

我只在开发中使用了几个月,但到目前为止一直都很好。

答案 2 :(得分:1)

是的,你必须拉下你的物体,操纵它们并将它们推回去。

在推送新照片时,客户负责呼叫的是什么?您可能最好将其设置为触发器,因此您的应用程序不会直接负责额外(容易忘记)的步骤。当然,这是复杂性和偏好的权衡。

答案 3 :(得分:0)

一种选择是构建存储过程中的sql字符串,并通过DataContext.ExecuteQuery方法执行它。这样做会阻止记录被提取。