2011-11-22 9 views
7

Sembra esserci un progetto DapperExtensions, ma esiste anche una classe SqlMapperExtensions nel progetto Dapper. C'è sovrapposizione? Si preferisce l'altro? Non riesco a trovare alcuna documentazione su Dapper.Contrib.Dapper SqlMapperExtensions/Dapper.Contrib?

risposta

5

Dapper.Contrib è il nome assembly: https://github.com/StackExchange/Dapper/tree/master/Dapper.Contrib

SqlMapperExtensions è la classe statica che contiene i metodi contrib entro Dapper.Contrib: https://github.com/StackExchange/Dapper/blob/master/Dapper.Contrib/SqlMapperExtensions.cs

La documentazione migliore è la classe test case: https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests.Contrib/TestSuite.cs

+0

'Dapper.Contrib' in Nuget? Usare 'Dapper.Contrib' e' Dapper.Rainbow' nello stesso progetto è una buona pratica? – Kiquenet

3

penso user1003841 era riferito a https://github.com/tmsmith/Dapper-Extensions.

Gli autori sono Thad Smith e Page Brooks - quindi non è il lavoro di Sam Saffron. La pagina del progetto dice "Questa libreria è uno sforzo separato da Dapper.Contrib".

+0

"Gli autori sono Thad Smith e Page Brooks - quindi non è il lavoro di Sam Saffron." mi ha fatto lol a causa di chi la risposta originale è venuto da – Terry

2

Ho scritto il primo Dapper.Contrib molto tempo fa dopo alcune discussioni con Sam. Non conosco i dettagli del pacchetto Extensions e sembrano fare la stessa cosa CRUD più o meno ma il pacchetto Contrib potrebbe essere un po 'più veloce in alcuni scenari perché ha una cache integrata per entrambe le query e per l'interfaccia basati su POCO con tracciamento interno "sporco". Tagliò dal test-code:

 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 non ha il bel sistema di predicato di ricerca, che ha le estensioni. NOTA c'è una buona discussione su Dapper.Contrib here Dapper.Rainbow VS Dapper.Contrib

+0

Sono sicuro che mi manca qualcosa di stupido e ovvio - ma ottengo "utente non contiene una definizione per IsNull" on line 3. Da dove viene IsNull? grazie. – niico

+0

hai anche un link per la lista completa di questo codice? – niico

+1

Il metodo IsNull() è solo un semplice metodo di prova incluso in Dapper-source su GitHub –