2011-11-22 22 views
7

Dường như có một dự án DapperExtensions, nhưng cũng có một lớp SqlMapperExtensions trong dự án Dapper. Có chồng chéo không? Là một trong những ưu tiên hơn khác? Tôi không thể tìm thấy bất kỳ tài liệu nào trên Dapper.Contrib.Dapper SqlMapperExtensions/Dapper.Contrib?

Trả lời

5

Dapper.Contrib là tên lắp ráp: https://github.com/StackExchange/Dapper/tree/master/Dapper.Contrib

SqlMapperExtensions là lớp tĩnh có chứa các phương pháp contrib trong Dapper.Contrib: https://github.com/StackExchange/Dapper/blob/master/Dapper.Contrib/SqlMapperExtensions.cs

Tài liệu tốt nhất là lớp test: https://github.com/StackExchange/Dapper/blob/master/Dapper.Tests.Contrib/TestSuite.cs

+0

'Dapper.Contrib' in Nuget? Sử dụng 'Dapper.Contrib' và' Dapper.Rainbow' trong cùng một dự án là thực hành tốt? – Kiquenet

3

Tôi nghĩ user1003841 là đề cập đến https://github.com/tmsmith/Dapper-Extensions.

Các tác giả là Thad Smith và Page Brooks - vì vậy nó không phải là tác phẩm của Sam Saffron. Trang dự án nói "Thư viện này là một nỗ lực riêng biệt từ Dapper.Contrib".

+0

"Các tác giả là Thad Smith và Page Brooks - vì vậy nó không phải là tác phẩm của Sam Saffron." làm cho tôi lol vì câu trả lời ban đầu đến từ – Terry

2

Tôi đã viết Dapper.Contrib đầu tiên một thời gian dài trước đây sau khi thảo luận với Sam. Tôi không biết chi tiết của gói Extensions và họ dường như làm cùng một điều CRUD nhiều hơn hoặc ít hơn nhưng gói Contrib có thể nhanh hơn một chút trong một số trường hợp vì nó có bộ nhớ đệm tích hợp cho cả truy vấn và giao diện dựa trên POCO với một "bẩn" theo dõi nội bộ. Được lấy từ mã kiểm tra:

 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 không có hệ thống tìm kiếm vị trí đẹp mà Tiện ích mở rộng có. LƯU Ý có một chuỗi tốt trên Dapper.Contrib tại đây Dapper.Rainbow VS Dapper.Contrib

+0

Tôi chắc chắn rằng tôi đang thiếu một cái gì đó câm & rõ ràng - nhưng tôi nhận được "người dùng không chứa một định nghĩa cho IsNull" trên dòng 3. IsNull đến từ đâu? cám ơn. – niico

+0

bạn có liên kết đến danh sách đầy đủ của mã này không? – niico

+1

Phương thức IsNull() chỉ là một phương pháp thử nghiệm đơn giản được bao gồm trong nguồn Dapper trên GitHub –