3

我有一个存储带有 smallint SortOrder 字段的照片的 SQL 表。用户可以插入新照片,指定小数排序顺序以将新记录放置在 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

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

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

于 2010-01-25T06:06:36.057 回答