В своей работе я использую комбинацию LINQ и Dapper. Я заменяю свой код LINQ на Dapper местами из соображений производительности. У меня есть много объектов данных LINQ, созданных путем перетаскивания в диаграмму базы данных Visual Studio из SQL Server.
В следующем примере у меня уже есть объект LINQ в памяти, и я хотел бы передать его Dapper в качестве параметров для запроса. Например:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
cagedAnimal).SingleOrDefault();
cagedAnimal содержит открытые свойства AnimalId и AnimalType с геттерами и сеттерами.
Однако при выполнении этого кода я получаю следующую ошибку:
Тип: SMDApp.Models.Animal is
не поддерживается dapper
Следующий код работает:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
new
{
AnimalId = cagedAnimal.AnimalId,
AnimalType = cagedAnimal.AnimalType
}
).SingleOrDefault();
Мне было бы удобнее использовать существующий объект, особенно когда я использую более одного свойства объекта в качестве параметра для запроса. Кто-нибудь может сказать, почему это работает для анонимного объекта, но не для автоматически сгенерированного объекта LINQ?
Отредактировано в ответ на ответ Бена Робинсона.
Отредактировано второй раз в ответ на ответ Марка Гравелла.