Dapper para NET Core: inserte en una tabla y devuelva la identificación de la fila insertada

asp.net-core dapper

Pregunta

Tengo el siguiente método en mi repositorio. A partir de ahora, creo que el int devuelto es simplemente uno que indica si la operación fue exitosa o no. Quiero que int sea la identificación (que es la columna única de la tabla) que se devolverá después de una ejecución exitosa. ¿Cómo logro esto?

    public async Task<int> AddNewGroup()
    {
        using(_connection)
        {
            _connection.Open();
            var id = await _connection.ExecuteAsync("INSERT INTO groups").Single();
        }
    }

Respuesta aceptada

Puede ejecutar una consulta que tiene 2 partes, primero su parte INSERT y la segunda es una parte SELECCIONAR . En la parte SELECCIONAR, puede devolver (seleccionar) el valor de columna que desee.

Por ejemplo, si su tabla de grupo tiene una columna de clave principal llamada GroupId y ha establecido esa columna para generación de valor de Identidad (generación automática de valor), puede llamar a SCOPE_IDENTITY() para obtener el valor generado.

Usaremos el método QueryAsync .

public async Task<int> AddNewGroup()
{
   using(_connection)
   {
      _connection.Open();
      var q = @"INSERT INTO Groups(Name,Description) VALUES
                 (@name, @desc); SELECT CAST(SCOPE_IDENTITY() as int)"
      var result = await _connection.QueryAsync<int>(q, 
                                          new { @name="some name", @desc="some desc"});
      return result.Single();
   }
}

Respuesta popular

No tiene que crear manualmente la consulta de inserción, puede usar Dapper.Contrib github, que le ayuda a administrar las operaciones CRUD.

Usando Dapper.Contrib puedes hacer algo como:

 public async Task<int> AddNewGroup(Group entity)
 {
        using (_connection)
        {
             _connection.Open();
             var id = await _connection.InsertAsync(entity);
         }
 }


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é