Pregunta

Estoy tratando de asimilar a Dapper y parece que me falta algo muy fundamental, ¿alguien puede explicar el siguiente código tomado de la página de inicio de Dapper en el código de Google y explicar por qué no hay una cláusula From y el segundo parámetro para la consulta?El método (dinámico) se pasa de un tipo anónimo, deduzco que esto de alguna manera está configurando un objeto de comando, pero me gustaría una explicación en terminología simple.

Gracias, Stephen

public class Dog {    
    public int? Age { get; set; }    
    public Guid Id { get; set; }    
    public string Name { get; set; }    
    public float? Weight { get; set; }    
    public int IgnoredProperty {
        get { return 1; }
    }
}

var guid = Guid.NewGuid();
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });            

dog.Count().IsEqualTo(1);
dog.First().Age.IsNull();
dog.First().Id.IsEqualTo(guid);
¿Fue útil?

Solución

Los dos primeros ejemplos simplemente no hacen ningún acceso a datos "reales", probablemente para que sean simples.
Sí, se usa una conexión (connection.Query(...)), pero solo porque esa es la única forma de llamar a los métodos de Dapper (porque extienden la interfaz IDbConnection).

Algo como esto es un código SQL perfectamente válido:

select 'foo', 1

... simplemente "genera" su resultado sobre la marcha, sin seleccionar nada de una tabla.

El ejemplo con los parámetros y el tipo anónimo:

var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });)

... simplemente muestra la capacidad de Dapper para enviar parámetros SQL en forma detipo anónimo .
Nuevamente, la consulta en realidad no selecciona nada de una tabla, probablemente para que sea más simple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top