2011-11-22 107 views

回答

5
+0

Nuget中的'Dapper.Contrib'?在同一個項目中使用'Dapper.Contrib'和'Dapper.Rainbow'是很好的做法嗎? – Kiquenet

3

我覺得user1003841是參考https://github.com/tmsmith/Dapper-Extensions

作者是Thad Smith和Page Brooks--所以這不是Sam Saffron的工作。項目頁面顯示「此庫與Dapper.Contrib分離」。

+0

「作者是Thad Smith和Page Brooks--所以這不是Sam Saffron的工作。」讓我大聲笑,因爲誰的原始答案來自 – Terry

2

很久以前,我在與Sam的一些討論後寫了第一篇Dapper.Contrib。我不知道擴展包的詳細信息,它們似乎或多或少地執行相同的CRUD事件,但是在某些情況下,Contrib包可能會稍微快一點,因爲它具有用於查詢和接口的內置緩存基於內部的POCO「髒」跟蹤。從測試代碼中刪除:

 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沒有擴展功能很好看的謂詞系統。 注意 Dapper.Contrib在這裏有一個很好的線程Dapper.Rainbow VS Dapper.Contrib

+0

我敢肯定,我錯過了一些愚蠢的和明顯的 - 但我得到「用戶不包含IsNull的定義」在第3行。IsNull從哪裏來?謝謝。 – niico

+0

您是否也有鏈接到此代碼的完整列表? – niico

+1

IsNull()方法只是一個簡單的測試方法,它包含在GitHub上的Dapper源代碼中 –