我接管的应用程序有这样的代码:
db.RunInTransaction(() =>
{
foreach (CategorySource category in categories)
{
db.Insert(category);
}
Console.Out.WriteLine("Categories: \r\n {0}", categories.Count);
}); db.Commit();
如果没有办法处理或检查是否有回滚,谁能告诉我在事务中运行它有什么好处?
对于您向我们展示的示例,即执行单个插入,如果不可能捕获异常和回滚,我认为在事务内执行此操作没有任何好处。然而,更可能的目的是提供一种简单的执行方法multipleSQL 命令,例如在单个事务中进行多次插入。如果您的代码希望从数据库的其他观察者的角度原子地进行这些插入,那么在那里使用事务是有必要的。即使没有回滚的机会,只要您相当确定/不担心可能不会发生故障,这一点也成立。
来自sqlite-net 文档 https://github.com/praeclarum/sqlite-net/wiki/Transactions,有一种方法可以进行回滚,但您需要使用低级 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)