私の仕事では、LINQ と Dapper を組み合わせて使用しています。パフォーマンス上の理由から、LINQ コードを Dapper に置き換えています。SQL Server から Visual Studio データベース ダイアグラムにドラッグ アンド ドロップして作成した LINQ データ オブジェクトが多数あります。
次の例では、既にメモリ内に LINQ オブジェクトがあり、それをクエリのパラメーターとして Dapper に渡したいと考えています。例えば:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
cagedAnimal).SingleOrDefault();
cagedAnimal には、getter と setter を持つパブリック プロパティ AnimalId と AnimalType が含まれています。
ただし、このコードを実行すると、次のエラーが発生します。
タイプ: SMDApp.Models.Animal は dapper ではサポートされていません
次のコードは機能します。
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
new
{
AnimalId = cagedAnimal.AnimalId,
AnimalType = cagedAnimal.AnimalType
}
).SingleOrDefault();
特にオブジェクトの複数のプロパティをクエリのパラメーターとして使用している場合は、既存のオブジェクトを使用する方が便利です。これが匿名オブジェクトでは機能するが、自動生成された LINQ オブジェクトでは機能しない理由を誰か教えてもらえますか?
Ben Robinson の返信に応じて編集。
Marc Gravell の返信に応じて 2 回目の編集を行いました。