Разъяснение примера кода Dapper - PullRequest
12 голосов
/ 17 июня 2011

Я пытаюсь обмануть Даппера и, похоже, упускаю что-то очень фундаментальное, может кто-нибудь объяснить следующий код, взятый с домашней страницы Dapper в коде Google, и объяснить, почему нет условия From и второго параметра в QueryМетод (динамический) передается анонимного типа, я так понимаю, это как-то настраивает объект команды, но хотелось бы получить объяснение в простой смертной терминологии.

Спасибо, Стивен

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

1 Ответ

11 голосов
/ 17 июня 2011

Первые два примера просто не делают никакого «реального» доступа к данным, возможно, для простоты.
Да, используется соединение (connection.Query(...)), но только потому, что это единственный способ вызвать методы Dapper (потому что они расширяют интерфейс IDbConnection).

Что-то вроде этого - совершенно правильный код SQL:

select 'foo', 1

... он просто «генерирует» свой результат на лету, фактически не выбирая ничего из таблицы.

Пример с параметрами и анонимным типом:

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

... просто показывает способность Даппера передавать параметры SQL в виде анонимного типа .
Опять же, запрос на самом деле ничего не выбирает из таблицы, возможно, для простоты.

...