¿Cómo funciona Dapper.NET internamente con .Count () y SingleOrDefault ()?

c# dapper

Pregunta

Aunque soy nuevo en Dapper, soy consciente de los ORM y DAL y he implementado DAL con NHibernate anteriormente.

Consulta de ejemplo: -

string sql = "SELECT * FROM MyTable";
public int GetCount()
{
    var result = Connection.Query<MyTablePoco>(sql).Count();
    return result;
}

¿Convertirá Dapper esta consulta (internamente) en SELECT COUNT(*) FROM MyTable mirando .Count() al final?

De manera similar, ¿se convertirá a SELECT TOP 1 * FROM MyTable en caso de SingleOrDefault() ?

Vengo del mundo NHibernate donde genera consultas en consecuencia. Aunque no estoy seguro acerca de Dapper. Como estoy trabajando con MS Access, no veo una forma de verificar la consulta generada.

Respuesta aceptada

No, Dapper no ajustará tu consulta. La forma inmediata de decir esto es simplemente: ¿el método devuelve IEnumerable... vs IQueryable... ? Si es el primero, entonces solo puede usar mecanismos locales en memoria.

Específicamente, de manera predeterminada , Query realmente devolverá una List<> completamente poblada. El método Count() LINQ reconoce eso y simplemente accede a la propiedad .Count de la lista. Entonces todos los datos se obtienen de la base de datos.

Si desea solicitar el recuento a la base de datos , solicite la cuenta en la base de datos .

En cuanto a los mecanismos para ver lo que realmente se envía a la base de datos: utilizamos miniperfil para esto. Funciona muy bien.

Nota: cuando consulta exactamente una fila: QueryFirstOrDefault (y las otras variantes que podría esperar) existen y tienen optimizaciones internas (incluidas sugerencias para ADO.NET, aunque no todos los proveedores pueden actuar sobre esas cosas) para hacer las cosas de la manera más eficiente posible , pero no ajusta su consulta. En algunos casos, el proveedor mismo (no apuesto) puede ayudar, pero en última instancia: si solo desea la primera fila, solicite a la base de datos la primera fila ( TOP o similar).



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é