Używam kombinacji LINQ i Dapper w mojej pracy. Zamieniam mój kod LINQ na Dapper w miejscach ze względu na wydajność. Mam wiele obiektów danych LINQ utworzonych przez przeciągnięcie i upuszczenie na diagram bazy danych Visual Studio z SQL Server.Wywoływane parametrycznie zapytania z automatycznie wygenerowanymi typami LINQ
W poniższym przykładzie już mam obiekt LINQ w pamięci i chciałbym przekazać go do Dapper jako parametry dla zapytania. Na przykład:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
cagedAnimal).SingleOrDefault();
cagedAnimal zawiera właściwości publiczne AnimalId i AnimalType z elementami pobierającymi i ustawiającymi.
Jednak na wykonanie tego kodu pojawia się następujący błąd:
The type : SMDApp.Models.Animal is not supported by dapper
Poniższy kod działa:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
new
{
AnimalId = cagedAnimal.AnimalId,
AnimalType = cagedAnimal.AnimalType
}
).SingleOrDefault();
Byłoby bardziej wygodne dla mnie do korzystania z istniejącego obiektu szczególnie tam, gdzie Używam więcej niż jednej właściwości obiektu jako parametru dla zapytania. Czy ktokolwiek może mi powiedzieć, dlaczego działa to w przypadku anonimowego obiektu, ale nie jest generowanym automatycznie obiektem LINQ?
Edytowane w odpowiedzi na odpowiedź Bena Robinsona.
Edytowane po raz drugi w odpowiedzi na odpowiedź Marca Gravell.
czy jesteś * pewien * robisz "" ... ", cagedAnimal)'? może zamiast tego robisz '" ... ", nowe {cagedAnimal})? w zasadzie - to powinno już działać, chociaż jest trochę marnotrawstwem, że dodatkowe parametry mogą być niepotrzebnie dodawane/ –
tylko po to, aby poinformować cię, że właśnie wysłałem poprawkę, która: zignoruje wszelkie właściwości, które nie są używane w zapytaniu, i b: dać znacznie lepszy komunikat o błędzie, gdy * nie * ma problemy. Nie wdrożyłem w Nuget, ale z nowym kodem powyższy przykład powinien zadziałać dobrze –
Czekamy na to! –