2017-08-30 39 views
1

使用Dapper或Dapper.SimpleCRUD如何從表中刪除列表。喜歡的東西:使用Dapper刪除列表<T>使用Dapper

public static void DeleteList<T>(List<T> listToDelete) 
    { 
     using (var connection = OpenConnection()) 
     { 
      connection.Delete<T>(listToDelete); 
     } 
    } 

但是當我嘗試,我得到...

型DataModel.MyTable的成員不能被用作參數值

是國內唯一選項傳遞一個WHERE子句?

回答

2

我沒有看到任何你想達到的Dapper方法。唯一的選擇是兩次單次刪除和兩次多次刪除。

public static int Delete<T>(this IDbConnection connection, int Id) 

public static int Delete<T>(this IDbConnection connection, T entityToDelete) 

public static int DeleteList<T>(this IDbConnection connection, object whereConditions, IDbTransaction transaction = null, int? commandTimeout = null) 

public static int DeleteList<T>(this IDbConnection connection, string conditions, object parameters = null, IDbTransaction transaction = null, int? commandTimeout = null) 

這兩種刪除都要求您傳遞條件或where子句。示例:

connection.DeleteList<User>(new { Age = 10 }); 
connection.DeleteList<User>("Where age > 20"); 
connection.DeleteList<User>("Where age > @Age", new {Age = 20}); 
+0

好的,是的,這就是我所看到的。只是希望有人知道我可能錯過的一個竅門(或者其他) –

2

Dapper不知道你的實體;它不像實體框架。你需要自己執行一個SQL命令或一個存儲過程。

public static void DeleteList(List<int> idToDelete) 
{ 
    using (IDbConnection conn = new SqlConnection(connString)) 
    { 
     conn.Open(); 
     foreach (int id in idToDelete) 
     { 
      conn.Execute(@"DELETE FROM [User] WHERE Id = @Id", new {Id = id}); 
     } 
    } 
} 

或者Execute a Command multiple times

public static void DeleteList(List<int> idToDelete) 
{ 
    using (IDbConnection conn = new SqlConnection(connString)) 
    { 
     conn.Open(); 
     conn.Execute(@"DELETE FROM [User] WHERE Id = @Id", 
      idToDelete.Select(x => new { Id = x }).ToArray()); 
    } 
}