【发布时间】:2020-01-09 20:45:31
【问题描述】:
我需要将有关异常的信息保存到数据库中。
即
SomeMethod()
{
try
{
using(transaction = context.beginTransaction())
{
try
{
// here is the database error
await transaction.CommitAsync();
}
catch(Exception e)
{
await transaction.Rollback();
throw;
}
}
}
catch(Exception exception)
{
// Here I get the same error that was generated inside the transaction
context.Set<LogEntity>().Add(new LogEntity(....));
await context.SaveChangesAsync();
}
}
我是否正确理解上下文是与数据库的连接,并且在一个上下文中我可以执行多个事务?
据我了解,这个阶段的上下文处于脏状态?
发生事务错误后如何写入数据库?
【问题讨论】:
-
您认为错误不是连接问题?
-
异常也可能是由于与 DbContext 关联的实体的状态,在这种情况下,对 SaveChanges 的另一个调用将生成相同的异常。我会使用一个新的 DbContext 实例来记录异常,其中异常可能是由 DbContext 生成的。
-
是的,错误与实体的状态有关。我认为回滚也应该回滚实体的状态。在这个阶段,我创建了一个事务包装器,当我调用回滚方法时,实体的状态被回滚,但我不确定这是什么问题(我最近与 ef 合作过)。
标签: c# entity-framework-6 entity-framework-core