提问者:小点点

Dapper、.NET Core和事务失败


我们将基于 Dapper 的应用程序移植到 .NET Core,我们的事务代码存在问题。

我们用"行动"来执行东西

    public Action<IDbConnection> CreateAction(string statement, object values)
    {
        return (dbConnection) => dbConnection.Execute(statement, values);
    }

我们使用方法来执行这些动作

    public void Execute(IEnumerable<Action<IDbConnection>> actions)
    {

        using (IDbConnection connection = OpenConnection())
        using (IDbTransaction transaction = connection.BeginTransaction())
        {
            try
            {
                foreach (var action in actions)
                {
                    action(transaction.Connection);
                }
                transaction.Commit();
            }
            catch
            {
                transaction.Rollback();
                throw;
            }
        }
    }

这很适合。NET Framework和Dapper 1.42,但它在。净芯带Dapper 1.50.2。

系统。InvalidOperationException:“当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery要求命令具有事务。命令的Transaction属性尚未初始化。

如果我们使用它删除事务,它也可以正常工作。

需要改变什么才能使其正常工作?


共1个答案

匿名用户

好的,看来我们现在必须显式传递事务。

    public void Execute(IEnumerable<Action<IDbConnection, IDbTransaction>> actions)
    {
        using (IDbConnection connection = OpenConnection())
        using (IDbTransaction transaction = connection.BeginTransaction())
        {
            try
            {
                foreach (var action in actions)
                {
                    action(transaction.Connection, transaction);
                }
                transaction.Commit();
            }
            catch
            {
                transaction.Rollback();
                throw;
            }
        }
    }