Esclarecimento do código de exemplo Dapper
Pergunta
Estou tentando grocar o Dapper e parece que está faltando algo muito fundamental. Alguém pode explicar o código a seguir retirado da página inicial do Dapper no código do Google e explicar por que não há cláusula From e o segundo parâmetro para a consultamétodo (dinâmico) é passado um tipo anônimo, suponho que isso é de alguma forma configurar um objeto de comando, mas gostaria de uma explicação em mera terminologia mortal.
Obrigado, 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);
Solução
Os primeiros dois exemplos simplesmente não oferecem nenhum acesso "real" aos dados, provavelmente para mantê-los simples.
Sim, existe uma conexão usada (connection.Query(...)
), mas apenas porque essa é a única maneira de chamar os métodos de Dapper (porque eles estendem a interface IDbConnection).
Algo assim é um código SQL perfeitamente válido:
select 'foo', 1
... ele apenas "gera" seu resultado instantaneamente, sem realmente selecionar nada em uma tabela.
O exemplo com os parâmetros e o tipo anônimo:
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });
)
... apenas mostra a capacidade do Dapper de enviar parâmetros SQL na forma de umtipo anônimo .
Novamente, a consulta não seleciona realmente nada de uma tabela, provavelmente para mantê-la simples.