Я использую в своей работе комбинацию 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?
Отредактировано в ответ на ответ Бена Робинсона.
Отредактировано во второй раз в ответ на ответ Марка Гравелла.