2017-08-30 5 views
1

Verwendung von Dapper oder Dapper.SimpleCRUD, Wie kann ich eine Liste aus einer Tabelle löschen. Etwas wie:Löschen Sie eine Liste <T> mit Dapper

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

Aber wenn ich versuche, dass ich ...

Das Mitglied des Typs DataModel.MyTable kann nicht als Parameterwert verwendet werden

Ist die einzige Option, um eine WHERE-Klausel zu übergeben?

Antwort

2

Ich sehe keine Dapper-Methode für das, was Sie erreichen möchten. Die einzigen Optionen sind zwei einzelne Löschungen und zwei Mehrfachlöschungen.

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) 

Bei beiden Löschvorgängen müssen Sie Bedingungen oder eine Where-Klausel übergeben. Beispiele:

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

ok, ja, das habe ich auch gesehen. Ich habe nur gehofft, dass jemand einen Trick gekannt hat, den ich vielleicht verpasst habe (oder so) –

2

Dapper kennt Ihre Entität nicht; Es ist nicht wie Entity Framework. Sie müssen einen SQL-Befehl oder eine Store-Prozedur selbst ausführen.

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

Oder 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()); 
    } 
} 
Verwandte Themen