Параметризованные запросы Dapper с автоматически сгенерированными типами LINQ

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

Отредактировано в ответ на ответ Бена Робинсона.

Отредактировано во второй раз в ответ на ответ Марка Гравелла.

6
задан Giles Roberts 29 June 2011 в 12:18
поделиться