我有一个包含单个字段的大型模型对象集合,我想为所有这些字段更新,表明状态发生了变化(它们都转换到了相同的新状态。)我无法有效地更新整个集合使用UpdateAll(),但对于大型集合,这变得非常慢。
我想知道是否有一个集合友好的方式来调用UpdateOnly(),如果没有,我想知道我的最佳路由是围绕每个模型对象的UpdateOnly()的单独调用包装事务。 (如果没有,我有兴趣学习推荐的方法来实现这一点。)
最后作为一个令人敬畏的框架 - 非常感谢Demis和所有其他contributors!
答案 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);