mettre à jour N lignes avec des considérations de performance

asp.net-mvc c# dapper sql-server

Question

J'ai une table avec OrderSequence, le schéma ressemble à peu près à ceci:

  • id
  • prénom
  • OrderSequence

J'ai un tableau d'identifiants ("1", "2", "3", "4") dans mes codes d'action MVC, je veux définir le SequenceOrder à des fins de tri. Je ne veux pas le boucler via .Net et exécuter N nombre de requêtes SQL. Comment devrais-je le faire en utilisant dapper / raw ado.net?

Réponse acceptée

Dapper peut le faire via:

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

Cependant, il suffit d'utiliser dapper pour dérouler une boucle - en réalité, il appelle Execute par ligne en votre nom, exactement comme si vous l'aviez fait:

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

Si vous souhaitez transmettre toutes les données en une fois, vous pouvez consulter les paramètres de la table, que dapper prend en charge dans les versions récentes .



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi