2014-09-21 11 views
7

Mam aplikację internetową, która używa starej szkoły SqlHelper klasy.Jak zdobyć SqlDataReader z Dapper?

Chcę utworzyć niestandardową SqlHelper, która używa Dapper pod spodem. Jak mogę uzyskać SqlDataReader od Dappera?

+0

Nie jestem bystrym ekspertem, ale dapper jest stworzony do pracy na warstwie obiektów (to Micro ORM) i nie martwi się zwykłymi materiałami ado.net, w tym SqlDataReader. – reptildarat

+0

@reptildarat, wiem. Ale potrzebuję tego z jakiegoś powodu. – user960567

Odpowiedz

9

Istnieje metoda ExecuteReader, która przekazuje czytelnikowi dane, że połączenie wygenerowane: można rzucić to, jeśli wiesz, że faktycznie jest SqlDataReader. W tym scenariuszu dapper przetwarza jedynie parametry i literalną iniekcję.

using(var reader = (SqlDataReader) 
    conn.ExecuteReader(sql, args)) 
{ 
    // use reader here 
} 

Jestem jednak bardziej niż trochę intryguje, co chcesz zrobić SqlHelper że Dapper nie już zrobić (ale lepiej). Prawdziwe pytanie: lubię ulepszać bibliotekę. Jeśli jest luka, daj mi znać.

+1

Dzięki. Czy istnieje również ExecuteReaderAsync? – user960567

+1

@user yes - w .NET 4.5 build –

+0

Właściwie klasa SqlHelper stworzona przez zespół Microsoft ds. Wzorców i praktyk w projekcie biblioteki korporacyjnej. Wiele aplikacji używa tej klasy i jest bardzo dobra w działaniu, ale ta klasa nie ma asynchronicznego wsparcia i jest bardzo stara (2002). Dapper ma bardzo dobrą wydajność, a także obsługuje asynchroniczne. Wielką zaletą SqlHelper jest to, że wystarczy przekazać connString, SPName i parametry. Teraz muszę pozbyć się SqlHelper. Więc zamieniam to na elegancję. Najszybszym sposobem przekonwertowania części dostępu do danych będzie zawarcie wewnętrznej funkcjonalności wewnątrz niestandardowej klasy SqlHelper. – user960567

Powiązane problemy