我正在调用此方法:
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)。但所有这些选项都会出现此例外。