该连接已经在一个事务中,不能参与另一个事务

时间:2018-10-25 22:04:22

标签: ef-core-2.1

我正在调用此方法:

    public IEnumerable<T> ExecuteObject<T>(string query, Func<DbDataReader, T> map)
    {

        var  trx = miContexto.Database.BeginTransaction();
        var entities = new List<T>();

        miContexto.Database.OpenConnection();

        using (var command = miContexto.Database.GetDbConnection().CreateCommand())
        {
            command.CommandText = query;
            command.CommandType = CommandType.Text;
            command.Transaction = trx.GetDbTransaction();

            using (var result = command.ExecuteReader())
            {
                while (result.Read())
                {
                    entities.Add(map(result));
                }
            }
        }

        trx.Commit();
        trx.Dispose();
        return entities;
    }

从MVC控制器通过以下行:

        var result = c.ExecuteObject(
                "SELECT TOP 10 Nombre, Apellido FROM Persona "
                + " GROUP BY Nombre, Apellido ORDER BY Apellido DESC",
                x => new Persona {
                    Nombre = (string)x[0],
                    Apellido = (string)x[1], });

        result.ToList();


        return View();

它在大多数时间都有效,但是经常会抛出异常“该连接已经在一个事务中并且不能参与另一个事务”。

任何想法。我试图以许多不同的方式来解决它,但是没有成功。 我用过using(事务作用域),using(dbcontext.database.opentransaction)。但所有这些选项都会出现此例外。

0 个答案:

没有答案