Dapper 使用单个查询(或在事务中)删除多个对象

Dapper 使用单个查询(或在事务中)删除多个对象,dapper,dapper-extensions,Dapper,Dapper Extensions,我正在使用简洁的扩展。我当前正在逐个删除所有对象: dbConnection.Delete<MyObj>(data); dbConnection.Delete(数据); 这不仅对性能不利,而且因为如果删除失败,我希望回滚整个操作。是否有方法执行“大规模”删除,例如传递对象列表而不是数据 您可以通过IPredicate一次性根据条件(WHERE子句)删除多个记录 如果只传递空的IPredicate,则表中的所有记录都将被删除 以下函数处理这两种情况: protected void

我正在使用简洁的扩展。我当前正在逐个删除所有对象:

dbConnection.Delete<MyObj>(data);
dbConnection.Delete(数据);

这不仅对性能不利,而且因为如果删除失败,我希望回滚整个操作。是否有方法执行“大规模”删除,例如传递对象列表而不是
数据

您可以通过
IPredicate
一次性根据条件(WHERE子句)删除多个记录

如果只传递空的
IPredicate
,则表中的所有记录都将被删除

以下函数处理这两种情况:

protected void DeleteBy(IPredicate where)
{//If 'where' is null, this method will delete all rows from the table.
    if(where == null)
        where = new PredicateGroup { Operator = GroupOperator.And, Predicates = new List<IPredicate>() };//Send empty predicateGroup to delete all records.

    var result = connection.Delete<TPoco>(predicate, ......);
}
交易是另一回事。您可以将所有当前代码放入事务中。您也可以将我的代码放入事务中。但在我的代码中,事务并没有多大区别;尽管建议始终使用事务

关于传递对象列表,我看不到任何方法。以下是用于删除记录的Dapper扩展的两种扩展方法:

public static bool Delete<T>(this IDbConnection connection, object predicate, IDbTransaction transaction = null, int? commandTimeout = default(int?)) where T : class;
public static bool Delete<T>(this IDbConnection connection, T entity, IDbTransaction transaction = null, int? commandTimeout = default(int?)) where T : class;
publicstaticbooldelete(这个IDbConnection连接,对象谓词,IDbTransaction=null,int?commandTimeout=default(int?),其中T:class;
公共静态bool Delete(这个IDbConnection连接,T实体,IDbTransaction transaction=null,int?commandTimeout=default(int?),其中T:class;

它都不接受对象列表。一个接受谓词,另一个接受单个对象。

谢谢。我认为这是唯一的解决办法。我唯一的疑问是,在我的场景中,过滤器可以快速成长。
public static bool Delete<T>(this IDbConnection connection, object predicate, IDbTransaction transaction = null, int? commandTimeout = default(int?)) where T : class;
public static bool Delete<T>(this IDbConnection connection, T entity, IDbTransaction transaction = null, int? commandTimeout = default(int?)) where T : class;