2017-08-30 1 views
1

En utilisant Dapper ou Dapper.SimpleCRUD, Comment supprimer une liste d'une table. Quelque chose comme:Supprimer une liste <T> en utilisant Dapper

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

Mais quand j'essaie, je reçois ...

Le membre de type DataModel.MyTable ne peut pas être utilisé comme une valeur de paramètre

est le seul option pour passer une clause WHERE?

Répondre

2

Je ne vois aucune méthode Dapper pour ce que vous voulez réaliser. Les seules options sont deux suppressions uniques et deux suppressions multiples.

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) 

Les deux suppressions multiples nécessitent de passer des conditions ou une clause where. Exemples:

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

ok, ouais, c'est ce que je voyais aussi. En espérant que quelqu'un connaisse un truc que j'ai peut-être manqué (ou quelque chose) –

2

Dapper ne connaît pas votre entité; ce n'est pas comme Entity Framework. Vous devez exécuter une commande SQL ou une procédure de stockage par vous-même.

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}); 
     } 
    } 
} 

Ou 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()); 
    } 
}