2011-11-22 11 views
7

Wygląda na to, że istnieje projekt DapperExtensions, ale istnieje również klasa SqlMapperExtensions w projekcie Dapper. Czy nakładają się na siebie? Czy preferujesz jeden nad drugim? Nie mogę znaleźć żadnej dokumentacji na Dapper.Contrib.Dapper SqlMapperExtensions/Dapper.Contrib?

Odpowiedz

5

Dapper.Contrib to nazwa zespołu: https://github.com/StackExchange/Dapper/tree/master/Dapper.Contrib

SqlMapperExtensions jest klasa statyczna zawierający metody contrib ciągu Dapper.Contrib: https://github.com/StackExchange/Dapper/blob/master/Dapper.Contrib/SqlMapperExtensions.cs

Najlepszym dokumentacja jest klasa sprawdzian: https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests.Contrib/TestSuite.cs

+0

'Dapper.Contrib' w Nuget? Używanie 'Dapper.Contrib' i' Dapper.Rainbow' w tym samym projekcie jest dobrą praktyką? – Kiquenet

3

myślę user1003841 było odnosząc się do https://github.com/tmsmith/Dapper-Extensions.

Autorami są Thad Smith i Page Brooks - więc to nie jest praca Sam Saffron. Strona projektu mówi "Ta biblioteka to osobny wysiłek od Dapper.Contrib".

+0

"Autorami są Thad Smith i Page Brooks - więc to nie jest praca Sam Saffron." mnie lol ze względu na to, kto oryginalna odpowiedź pochodzi z – Terry

2

Napisałem pierwszy Dapper.Contrib dawno temu po dyskusji z Samem. Nie znam szczegółów pakietu Extensions i wydaje się, że robią to samo CRUD-thing mniej więcej, ale pakiet Contrib może być nieco szybszy w niektórych scenariuszach, ponieważ ma wbudowaną pamięć podręczną dla obu zapytań i dla interfejsu oparte na POCO z wewnętrznym "brudnym" śledzeniem. Wycięty z kodu testowego:

 using (var connection = GetOpenConnection()) 
     { 
      connection.Get<User>(3).IsNull(); 

      var id = connection.Insert(new User {Name = "Adam", Age = 10}); 

      //get a user with "isdirty" tracking 
      var user = connection.Get<IUser>(id); 
      user.Name.IsEqualTo("Adam"); 
      connection.Update(user).IsEqualTo(false); //returns false if not updated, based on tracking 
      user.Name = "Bob"; 
      connection.Update(user).IsEqualTo(true); //returns true if updated, based on tracking 
      user = connection.Get<IUser>(id); 
      user.Name.IsEqualTo("Bob"); 

      //get a user with no tracking 
      var notrackedUser = connection.Get<User>(id); 
      notrackedUser.Name.IsEqualTo("Bob"); 
      connection.Update(notrackedUser).IsEqualTo(true); //returns true, even though user was not changed 
      notrackedUser.Name = "Cecil"; 
      connection.Update(notrackedUser).IsEqualTo(true); 
      connection.Get<User>(id).Name.IsEqualTo("Cecil"); 

      connection.Query<User>("select * from Users").Count().IsEqualTo(1); 
      connection.Delete(user).IsEqualTo(true); 
      connection.Query<User>("select * from Users").Count().IsEqualTo(0); 

      connection.Update(notrackedUser).IsEqualTo(false); //returns false, user not found 

Contrib nie ma ładnie wyglądającego systemu predykatów, który ma rozszerzenie. UWAGA istnieje dobry wątek na Dapper.Contrib tutaj Dapper.Rainbow VS Dapper.Contrib

+0

Jestem pewien, że brakuje mi coś głupiego i oczywiste - ale dostaję "użytkownik nie zawiera definicji IsNull" na linii 3. Skąd pochodzi IsNull? dzięki. – niico

+0

również masz link do pełnej listy tego kodu? – niico

+1

Metoda IsNull() jest po prostu prostą metodą testową, która jest zawarta w źródle Dapper na GitHub –