2011-06-16 24 views
12

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 cláusula From y el segundo parámetro del método Query (dinámico) se pasa de forma anónima, deduzco que de alguna manera está configurando un objeto de comando, pero me gustaría una explicación en la mera terminología mortal.Aclaración de Dapper Ejemplo Código

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); 
+0

Estoy a punto de tener una pregunta sobre Dapper, también. Estoy intentando descubrir cómo enviar una matriz TEntity [] completamente poblada a la función Execute. Mirando para ver si Marc asoma la cabeza por la puerta ... – IAbstract

+0

@IAbstract: ¿Por qué no haces tu propia pregunta, entonces? –

+0

@Robert: Lo haré ... cuando/si no puedo resolverlo. Fue solo un comentario ... ver mi comentario en la respuesta :) – IAbstract

Respuesta

11

Los dos primeros ejemplos simplemente no hacen ningún acceso a los datos "reales", probablemente con el fin de que sean sencillas.
Sí, hay una conexión utilizada (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 perfectamente válida código SQL:

select 'foo', 1 

... simplemente no "generar" su resultado sobre la marcha, sin seleccionar nada en realidad 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 });)

... sólo demuestra la capacidad de to submit SQL parameters in the form of an anonymous type Dapper.
Una vez más, la consulta en realidad no selecciona nada de una tabla, probablemente para mantenerlo simple.

+0

Gracias Christian. También debo suponer que debido a que están utilizando el signo @ de que este es el dialecto de SQL Server? ¿Debo reemplazar el @ con: por Oracle? –

+0

Lo siento, he leído demasiado el hecho de que usa Oracle (uso SQL Server, y no conozco Oracle). Sí, "@" indica un parámetro de SQL. Dado que Dapper mismo es completamente independiente de la base de datos (http://code.google.com/p/dapper-dot-net/#Will_dapper_work_with_my_db_provider), deberá usar el equivalente de Oracle de "@". –

+0

+1: buena información ... Y para MySql, reemplazaría la '@' por '?' ¿no? – IAbstract