2011-11-22 25 views
7

Parece que hay un proyecto DapperExtensions, pero también hay una clase SqlMapperExtensions en el proyecto Dapper. ¿Hay superposición? ¿Se prefiere uno sobre el otro? No puedo encontrar ninguna documentación sobre Dapper.Contrib.Dapper SqlMapperExtensions/Dapper.Contrib?

Respuesta

5

Dapper.Contrib es el nombre de ensamblado: https://github.com/StackExchange/Dapper/tree/master/Dapper.Contrib

SqlMapperExtensions es la clase estática que contiene los métodos contrib dentro Dapper.Contrib: https://github.com/StackExchange/Dapper/blob/master/Dapper.Contrib/SqlMapperExtensions.cs

La mejor documentación es la clase de caso de prueba: https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests.Contrib/TestSuite.cs

+0

'Dapper.Contrib' en Nuget? Usar 'Dapper.Contrib' y' Dapper.Rainbow' en el mismo proyecto ¿es una buena práctica? – Kiquenet

3

Creo user1003841 era refiriéndose al https://github.com/tmsmith/Dapper-Extensions.

Los autores son Thad Smith y Page Brooks, así que no es el trabajo de Sam Saffron. La página del proyecto dice "Esta biblioteca es un esfuerzo separado de Dapper.Contrib".

+0

"Los autores son Thad Smith y Page Brooks, así que no es el trabajo de Sam Saffron". me hizo jajaja porque la respuesta original vino de – Terry

2

Escribí el primer Dapper.Contrib hace mucho tiempo después de un debate con Sam. No conozco los detalles del paquete Extensions y parecen hacer más o menos lo mismo con CRUD, pero el paquete Contrib puede ser algo más rápido en algunos escenarios porque tiene un caché integrado para ambas consultas y para la interfaz. POCOs con base con un seguimiento interno "sucio". Snipped de la prueba de código:

 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 no tiene el buen sistema de predicado mirando el cual tiene extensiones. NOTA hay un buen hilo en Dapper.Contrib aquí Dapper.Rainbow VS Dapper.Contrib

+0

Estoy seguro de que me falta algo tonto y obvio, pero me aparece "el usuario no contiene una definición para IsNull" en la línea 3. ¿De dónde viene IsNull? Gracias. – niico

+0

también tiene un enlace a la lista completa de este código? – niico

+1

El método IsNull() es simplemente un método de prueba simple que se incluye en Dapper-source en GitHub –