У меня странная ошибка в 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: savePoint недопустим и должен быть результатом вызова SaveTransactionPoint.Имя параметра: savePoint
в SQLite.Net.SQLiteConnection.DoSavePointExecute (System.String savePoint, System.String cmd) [0x00063] в <8f2bb39aeff94a30a8628064be9c7efe>: 0 в SQLite.Net.SQLiteConnection.Release (System.String)0x00000] в <8f2bb39aeff94a30a8628064be9c7efe>: 0 в SQLite.Net.SQLiteConnection.RunInTransaction (действие System.Action) [0x0001d] в <8f2bb39aeff94a30a8628064be9c7efe.: 0.runInTransaction) [0x0001e] в <8f2bb39aeff94a30a8628064be9c7efe>: 0
Чтение в Интернете кажется чем-то связанным с вложенной транзакцией, но это не моя ситуация, поскольку все выполняется в одной транзакции.
Спасибо, L-
edit 28-05-2018 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);
}