我在使用事务的sqlite中遇到了一个奇怪的错误,我无法理解…
下面是我的代码:
_connection.RunInTransaction(() =>
{
_connection.UpdateAll(objProposte);
foreach (Proposte objProposta in objProposte)
{
string propostaID = objProposta.PropostaID;
List<ProposteDetails> lstProdDet = _connection.Table<ProposteDetails>().Where(x => x.PropostaID == propostaID).ToList();
if (lstProdDet != null && lstProdDet.Count() > 0)
{
//AN UPDATE GIVE ME THE SAME ERROR
_connection.DeleteAll(lstProdDet);
_connection.InsertAll(lstProdDet);
}
}
});
似乎_connection.updateall(objproposte);工作正常,但当我尝试在同一事务中执行其他操作时,得到以下异常:
System.ArgumentException:保存点无效,应为
调用SaveTransactionPoint的结果。参数名称:保存点
在sqlite.net.sqliteconnection.dosavepointexecute(system.string
savepoint,system.string cmd)[0x00063]输入
sqlite.net.sqliteConnection.release(system.string保存点)
[0x0000]输入<8f2bb39aeff94a30a8628064be9c7efe>:0
sqlite.net.sqliteConnection.runInTransaction(system.action操作)
[0x0001d]输入<8f2bb39aeff94a30a8628064be9c7efe>:0,位于
sqlite.net.sqliteConnection.InsertAll(System.Collections.IEnumerable
对象,system.boolean runintransaction)[0x0001e]in
<8f2bb39aeff94a30a8628064be9c7efe>:0
在Internet上阅读似乎与嵌套事务有关,但不是我的情况,因为它们都是在同一事务中完成的。
谢谢,
L -
编辑
2018年5月28日12:16:该配置工作……但应该做同样的事情:(
string my_transaction_point = null;
try
{
my_transaction_point = _connection.SaveTransactionPoint();
_connection.UpdateAll(objProposte, runInTransaction: false);
foreach (Proposte objProposta in objProposte)
{
string propostaID = objProposta.PropostaID;
List<ProposteDetails> lstProdDet = _connection.Table<ProposteDetails>().Where(x => x.PropostaID == propostaID).ToList();
if (lstProdDet != null && lstProdDet.Count() > 0)
{
_connection.DeleteAll(lstProdDet);
_connection.InsertAll(lstProdDet, runInTransaction: false);
}
}
_connection.Commit();
}
catch (Exception ex)
{
_connection.RollbackTo(my_transaction_point);
throw new Exception("UpdateProposta, " + ex.Message, ex);
}