我接管的应用有这段代码:
db.RunInTransaction(() =>
{
foreach (CategorySource category in categories)
{
db.Insert(category);
}
Console.Out.WriteLine("Categories: \r\n {0}", categories.Count);
}); db.Commit();
如果没有办法处理或检查是否有回滚,谁能告诉我在事务中运行它有什么好处?
最佳答案
对于您向我们展示的示例,即执行单个插入,如果不可能捕获异常和回滚,我认为在事务中执行此操作没有任何好处。然而,更可能的意图是创建一种简单的方法来执行多个 SQL 命令,例如在单个事务中进行多次插入。如果您的代码希望从数据库的其他观察者的角度来看以原子方式进行这些插入,那么在那里使用事务是有意义的。即使没有回滚的机会,这也是正确的,前提是您相当确定/不担心可能不会发生故障。
来自sqlite-net documentation , 有一种方法可以回滚,但你需要使用低级 API,例如
db.BeginTransaction ();
try {
foreach (CategorySource category in categories)
{
db.Insert(category);
}
Console.Out.WriteLine("Categories: \r\n {0}", categories.Count);
db.Commit ();
}
catch (Exception) {
db.Rollback ();
throw;
}
关于sqlite - db.RunInTransaction 是否总是需要一种方法来检查或处理回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41009327/