2017-08-30 9 views
1

Dapperを使うかDapper.SimpleCRUD、どのようにテーブルからリストを削除してもいいですか?何かのように:タイプDataModel.MyTableのメンバーは、パラメータ値として使用することはできませんリストを削除する<T> Dapperを使って

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

しかし、私は私が得る、ということしようとすると...

だけですWHERE句を渡すオプション?

答えて

2

達成したいと思うようなDapperメソッドはありません。唯一のオプションは、2つの単一の削除と2つの複数の削除です。

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) 

複数の削除を行うには、条件またはw​​here句を渡す必要があります。例:

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

ok、そうです、それも私が見ていたものです。ちょうど誰かが私が逃したかもしれない(または何か) –

2

Dapperはエンティティを認識しません。 Entity Frameworkのようなものではありません。自分で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}); 
     } 
    } 
} 

それとも

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()); 
    } 
} 
関連する問題