出于性能考虑更新N行

本文关键字:更新 于性能 性能 | 更新日期: 2023-09-27 18:15:40

我有一个OrderSequence表,模式大致如下:

  • id
  • <
  • 名称/gh>
  • OrderSequence

我有一个id数组("1","2","3","4")在我的MVC动作代码,我想设置排序目的的SequenceOrder。我不想通过。net循环它并执行N次sql查询。如何使用dapper/raw ado.net?

出于性能考虑更新N行

Dapper可以通过:

connection.Execute("update Orders set Sequence=@seq where Id=@id",
            ids.Select((id, seq) => new { id, seq }));

然而,这只是使用dapper展开一个循环-实际上它代表你调用Execute一行,完全相同,如果你已经做了:

int seq = 0;
foreach(var id in ids) {
    connection.Execute("update Orders set Sequence=@seq where Id=@id",
         new { id, seq });
    seq++;
}

如果你想一次传递所有的数据,你可以看看表值参数,dapper在最近的版本中支持。