Dapper Syntax - 2016

asp.net-mvc-5 dapper

Pregunta

Estoy comenzando mi primer proyecto de MVC usando Dapper (y Dapper.Contrib) en lugar de EF. Estoy tratando de asegurarme de usar la sintaxis correcta cuando lo uso. Buscando en la web, puedo ver que a medida que Dapper ha evolucionado, también tiene algunos de sus requisitos y sintaxis. ¿Existe un documento actualizado que muestre las mejores prácticas para usar Dapper en 2016?

Específicamente, mis preguntas son:

  • ¿Debo abrir y cerrar la conexión? Parece que Dapper solía requerirlo, pero puede que ya no lo necesite.

  • Usando Dapper.Contrib, ¿necesito encapsular mi código en una llamada 'de uso' o Dapper se ocupará de deshacerse automáticamente ahora?

¿Qué camino se recomienda?

private string dbconn = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
public Company Add(Company company)
    {

        using (SqlConnection cn = new SqlConnection(dbconn))
        {
            cn.Open();
            var id = cn.Insert(company);
            cn.Close();

            company.id = Convert.ToInt16(id);
        }

        return company;
    }

O

private IDbConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);

public Company Add(Company company)
    {
       var id = cn.Insert(company);
       company.id = Convert.ToInt16(id);

       return company;
    }

Respuesta aceptada

Con Dapper, hay dos formas de administrar la conexión:

  • Administrate por completo : aquí, eres completamente responsable de abrir y cerrar la conexión. Así es como trata la conexión mientras trabaja con ADO.NET. En este caso, debe asegurarse de que está desechando la conexión correctamente using bloqueo o llamando a Dispose explícitamente.
  • Permita que Dapper lo administre : Dapper automáticamente abre la conexión (si no se abrió) y la cierra (si fue creada por Dapper) por usted. Esto es similar al método DataAdapter.Fill() .

En 2016, debe evitar exponer su conexión directamente al código de su aplicación. Debería implementar la capa de acceso a los datos (preferiblemente usando algún buen ORM como Dapper que ya esté aprendiendo) utilizando patrones como UnitOfWork , Repository , etc. Puede encontrar ejemplos de código para UnitOfWork + Dapper aquí . Por favor revisa esto. Estoy seguro de que te ayudará.

Si no quiere implementar UnitOfWork , lo siguiente es lo siguiente:

  • Administrate por completo :

Lo siguiente es muestra:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    connection.Execute(......);
    //OR
    var data = connection.Query(......);
    //OR whatever
}

Si desea compartir la conexión en un ámbito superior y, por lo tanto, no podría usar el using bloque, solo asegúrese de Dispose conexión correctamente.

  • Permita que Dapper lo administre : personalmente no lo prefiero.

Lo siguiente es muestra:

SqlConnection connection = new SqlConnection(connectionString);
//Dapper will open connection on next line.
var data = connection.Query(......);
//Dapper will close connection in previous call.


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é