realizar una actualización parcial de la base de datos con dapper

c# dapper

Pregunta

Usuarios de la tabla de la base de datos dados, (nombre, apellido, edad y sexo). Quiero crear una declaración de actualización, mientras que cualquiera de estas columnas puede ser nula, no editada / procedente de algún tipo de cliente. El cliente crea un objeto Usuario {Nombre, Nombre de familia, Edad, Sexo}, solo cumplirá las propiedades modificadas, así que básicamente estoy buscando una manera de adivinar cómo crear la consulta y cómo enviarle los datos.

No sé cómo manejar este problema en absoluto además de obtener toda la fila y fusionar sus datos con el objeto que he recibido del cliente. Hasta ahora, es lo que hice: seleccionar> fusionar> actualizar.

Hay alguna otra manera ?

Respuesta aceptada

Supongamos que su clase de usuario es algo como este

public class User
{
    public int UserID { get; set; }
    public string Name {get; set;}
    public string FamilyName {get;set;}
    public int? Age { get; set; }
    public string Sex { get; set; }

}

(Observe el campo int definido como Nullable<int> para permitir la inserción de un valor nulo en el campo correspondiente)

Ahora, su código que establece los campos, que refleja un valor nulo para sus propiedades nulas, podría escribirse simplemente como una actualización normal. Todo lo que se requiere para pasar un valor nulo como parámetro lo realizan los internos de Dapper.

// Initialize just two fields and leave the other to their defaults
// (null for both strings and nullable ints)
User u = new User();
u.UserID = 1;
u.Name = "Steve";
bool ok = UpdateUser(u);
if(ok) ......


public UpdateUser(User info)
{
    using(SqlConnection cnn = new SqlConnection(@"Data Source=(LOCAL);
                                                Initial Catalog=TestDB;
                                                Integrated Security=True;"))
    {
        cnn.Open();

        // Prepare the parameters to pass to Dapper Execute 
        var pms = new
        {
           UserID = info.UserID   
           FirstName = info.Name,
           FamilyName = info.FamilyName,  // <- this is null
           Age = info.Age,                // <- this is null
           Sex = info.Sex                 // <- this is null
        };

        int rows = cnn.Execute(@"UPDATE [UserTable] 
                                 SET FirstName= @FirstName,
                                     LastName = @LastName, 
                                     Age = @Age, 
                                     Sex = @Sex
                                 WHERE UserID = @UserID",
                                 pms);
         return rows != 0;
    }
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué