1

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

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

最后顺便说一句 - 很棒的框架 - 非常感谢 Demis 和所有其他贡献者

4

1 回答 1

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);
于 2013-07-03T19:21:59.820 回答