Mise à jour d'une base de données Informix sur ODBC avec un objet à l'aide de Dapper

c# dapper

Question

J'essaie de savoir s'il existe un moyen de mettre à jour un objet d'un seul coup avec Dapper plutôt que de devoir écrire tous les alignements de variables / champs. Voici un exemple de ce que je fais maintenant, qui consiste à épeler explicitement chaque champ:

    public string UpdateAttributes(List<ItemAttribute> attributesList)
    {     
        try
        {
            using (IfxConnection con = new IfxConnection(WebConfigurationManager.AppSettings["LOKICONN"].ToString()))
            {
                con.Open();
                foreach (ItemAttribute item in attributesList)
                {
                    con.Execute("update oe_cnvwrk set cwr_response = ?, cwr_uom = ? where cwr_genero = ? and cwr_line = ?", 
                        new { cwr_response = item.cwr_response, cwr_uom = item.cwr_uom, cwr_genero = item.cwr_genero, cwr_line = item.cwr_line });
                }
                con.Close();
                return "success";
            }
        }
        catch (Exception x)
        {
            return x.ToString();
        }
    }

Est-il possible d'ignorer chaque variable et de référencer simplement l'objet? Ou une meilleure façon d'aborder cette période? Dapper permet de créer dynamiquement un objet avec une requête et de renseigner les valeurs d'un objet prédéfini, mais pour mettre à jour un objet existant, je ne trouve aucune documentation ou exemple. Avec un objet plus grand, cela devient un peu pénible, tout comme la maintenance si la table et l'objet doivent être modifiés.

Réponse acceptée

Cela pourrait fonctionner:

using (IfxConnection con = new IfxConnection(WebConfigurationManager.AppSettings["LOKICONN"].ToString()))
{
    con.Execute("update oe_cnvwrk set cwr_response = ?cwr_response?, cwr_uom = ?cwr_uom? where cwr_genero = ?cwr_genero? and cwr_line = ?cwr_line?", attributesList);
    return "success";
}

Changements:

  • pas besoin d'ouvrir / fermer la connexion
  • passe directement la séquence; pas besoin de boucler
  • utilise le spécial papper ?foo? la syntaxe, qui mappe les membres nommés des données disponibles au SQL positionnel; cela sera ré-écrit pour utiliser la position ? sql, mais en ajoutant les paramètres attendus dans l'ordre prévu


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