什么是对集合进行部分更新的有效方法

时间:2013-06-25 15:40:23

标签: servicestack ormlite-servicestack

我有一个包含单个字段的大型模型对象集合,我想为所有这些字段更新,表明状态发生了变化(它们都转换到了相同的新状态。)我无法有效地更新整个集合使用UpdateAll(),但对于大型集合,这变得非常慢。

我想知道是否有一个集合友好的方式来调用UpdateOnly(),如果没有,我想知道我的最佳路由是围绕每个模型对象的UpdateOnly()的单独调用包装事务。 (如果没有,我有兴趣学习推荐的方法来实现这一点。)

最后作为一个令人敬畏的框架 - 非常感谢Demis和所有其他contributors

1 个答案:

答案 0 :(得分:2)

在没有答案的情况下,我实现了我在问题中提到的解决方法(围绕对UpdateOnly()的单独调用包装事务。当相关表没有很多争用时,这似乎更好。但是当我们开始进行性能测试时,该循环成为整个应用程序的瓶颈。

我最终查看了ORMLite源代码(事后看来,我应该首先使用它。)您可以使用Update(this IDbConnection dbConn, string table = null, string set = null, string where = null)方法在ORMLite中进行批量部分更新。例如:

    var ids = MyObjectList.Select(h => h.Id);
    string idsCsv = string.Join(", ", ids);
    string whereClause = "Id in (" + idsCsv + ")";
    const string setClause = "MyStatus = 'Queried'";
    db.Update("MyObject", setClause, whereClause);