Realización de inserciones y actualizaciones con Dapper

c# dapper orm

Pregunta

Estoy interesado en usar Dapper, pero por lo que puedo decir, solo admite Query y Execute. No veo que Dapper incluya una forma de insertar y actualizar objetos.

Dado que nuestro proyecto (¿la mayoría de los proyectos?) Necesita hacer inserciones y actualizaciones, ¿cuál es la mejor práctica para hacer Inserciones y actualizaciones junto con Dapper?

Preferiblemente, no tendríamos que recurrir al método ADO.NET de creación de parámetros, etc.

La mejor respuesta que puedo encontrar en este momento es usar LinqToSQL para inserciones y actualizaciones. ¿Hay una mejor respuesta?

Respuesta aceptada

Estamos buscando construir algunos ayudantes, aún decidir sobre las API y si esto va en el núcleo o no. Consulte: https://code.google.com/archive/p/dapper-dot-net/issues/6 para ver el progreso.

Mientras tanto, puedes hacer lo siguiente

val = "my value";
cnn.Execute("insert into Table(val) values (@val)", new {val});

cnn.Execute("update Table set val = @val where Id = @id", new {val, id = 1});

etcétera

Ver también la publicación de mi blog: ese molesto problema INSERT

Actualizar

Como se señala en los comentarios, ahora hay varias extensiones disponibles en el proyecto Dapper.Contrib en la forma de estos métodos de extensión IDbConnection :

T Get<T>(id);
IEnumerable<T> GetAll<T>();
int Insert<T>(T obj);
int Insert<T>(Enumerable<T> list);
bool Update<T>(T obj);
bool Update<T>(Enumerable<T> list);
bool Delete<T>(T obj);
bool Delete<T>(Enumerable<T> list);
bool DeleteAll<T>();

Respuesta popular

Realizar operaciones CRUD usando Dapper es una tarea fácil. He mencionado los ejemplos a continuación que deberían ayudarlo en las operaciones CRUD.

Código para C RUD:

Método n. ° 1: este método se usa cuando inserta valores de diferentes entidades.

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string insertQuery = @"INSERT INTO [dbo].[Customer]([FirstName], [LastName], [State], [City], [IsActive], [CreatedOn]) VALUES (@FirstName, @LastName, @State, @City, @IsActive, @CreatedOn)";

    var result = db.Execute(insertQuery, new
    {
        customerModel.FirstName,
        customerModel.LastName,
        StateModel.State,
        CityModel.City,
        isActive,
        CreatedOn = DateTime.Now
    });
}

Método n.º 2: este método se utiliza cuando las propiedades de su entidad tienen los mismos nombres que las columnas SQL. Por lo tanto, Dapper es un ORM asigna las propiedades de la entidad con las columnas SQL correspondientes.

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string insertQuery = @"INSERT INTO [dbo].[Customer]([FirstName], [LastName], [State], [City], [IsActive], [CreatedOn]) VALUES (@FirstName, @LastName, @State, @City, @IsActive, @CreatedOn)";

    var result = db.Execute(insertQuery, customerViewModel);
}

Código para C R UD:

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string selectQuery = @"SELECT * FROM [dbo].[Customer] WHERE FirstName = @FirstName";

    var result = db.Query(selectQuery, new
    {
        customerModel.FirstName
    });
}

Código para CR U D:

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string updateQuery = @"UPDATE [dbo].[Customer] SET IsActive = @IsActive WHERE FirstName = @FirstName AND LastName = @LastName";

    var result = db.Execute(updateQuery, new
    {
        isActive,
        customerModel.FirstName,
        customerModel.LastName
    });
}

Código para CRU D :

using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDbConnection"].ConnectionString))
{
    string deleteQuery = @"DELETE FROM [dbo].[Customer] WHERE FirstName = @FirstName AND LastName = @LastName";

    var result = db.Execute(deleteQuery, new
    {
        customerModel.FirstName,
        customerModel.LastName
    });
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow