C# 在一个事务下更新WinRT中的两个虚拟表

C# 在一个事务下更新WinRT中的两个虚拟表,c#,sqlite,transactions,windows-runtime,uwp,C#,Sqlite,Transactions,Windows Runtime,Uwp,我正在Cordova框架下创建一个插件,目标是Win10(UWP),所以我的项目在WinRT中。我正在成功地使用SQLite3,我有SQLite.Net.Core-PCL和SQLite.Net-PCL(v3.1.1)的参考,并使用SQLite.UWP.2015版本3.13.0为我的Win10项目添加了SQLite3。 我必须使用虚拟表在给定的数据库上进行一些工作,但每当我想在一个事务中更新两个不同虚拟表中的某一行时,我的应用程序将在不引发任何异常的情况下退出,如果我不从VisualStudio2

我正在Cordova框架下创建一个插件,目标是Win10(UWP),所以我的项目在WinRT中。我正在成功地使用SQLite3,我有SQLite.Net.Core-PCL和SQLite.Net-PCL(v3.1.1)的参考,并使用SQLite.UWP.2015版本3.13.0为我的Win10项目添加了SQLite3。 我必须使用虚拟表在给定的数据库上进行一些工作,但每当我想在一个事务中更新两个不同虚拟表中的某一行时,我的应用程序将在不引发任何异常的情况下退出,如果我不从VisualStudio2015运行它,我会得到以下结果:

我在fts3中找到了行:

/*
**xSavepoint()方法。
**
**将挂起术语表的内容刷新到磁盘。
*/
静态int-fts3SavepointMethod(sqlite3_vtab*pVtab,int-iSavepoint){
int rc=SQLITE_OK;
未使用的_参数(iSavepoint);
assert(((Fts3Table*)pVtab)->inTransaction;
assert(((Fts3Table*)pVtab)->mxSavepointmxSavepoint=iSavepoint;
如果(((Fts3Table*)pVtab)->bIgnoreSavepoint==0){
rc=fts3SyncMethod(pVtab);
}
返回rc;
}
如果我在发布模式下运行,我不会得到这个错误,因为这个断言被排除在外,正如我看到的,行被成功修改,但在调试模式下,总是抛出我

我必须在一个事务中使用所有这些,因为如果其中一些事务失败,我必须回滚所有事务

你有什么想法,如何解决这个问题,或者为什么会发生这种情况

Assertion failed!
Program: ..\sqlite3.dll
File: tsrc/fts3.c
Line: 3772
Expression: assert( ((Fts3Table *)pVtab)->mxSavepoint < iSavepoint );
        var path = Path.Combine(ApplicationData.Current.LocalFolder.Path, "test.db");
        using (SQLiteConnection conn = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path))
        {
            try
            {
                conn.BeginTransaction();
                conn.Execute("CREATE VIRTUAL TABLE T1 USING fts4(ID,VALUE)");
                conn.Execute("CREATE VIRTUAL TABLE T2 USING fts4(ID,VALUE)");
                conn.Execute("INSERT INTO T1 VALUES ('1','VALUE')");
                conn.Execute("INSERT INTO T2 VALUES ('2','VALUE')");
                conn.Commit();

                conn.BeginTransaction();
                conn.Execute("UPDATE T1 SET  VALUE =  'value2'  WHERE  ID =  '1'"); //Everything is fine
                conn.Execute("UPDATE T2 SET  VALUE =  'value2'  WHERE  ID =  '2'"); //Fail
                conn.Commit();

            }
            catch (Exception ex)
            {
                Log.Error("Error occured while executing " + ex.Message);
            }
        }
/*
** The xSavepoint() method.
**
** Flush the contents of the pending-terms table to disk.
*/
static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){
  int rc = SQLITE_OK;
  UNUSED_PARAMETER(iSavepoint);
  assert( ((Fts3Table *)pVtab)->inTransaction );
  assert( ((Fts3Table *)pVtab)->mxSavepoint < iSavepoint );
  TESTONLY( ((Fts3Table *)pVtab)->mxSavepoint = iSavepoint );
  if( ((Fts3Table *)pVtab)->bIgnoreSavepoint==0 ){
    rc = fts3SyncMethod(pVtab);
  }
  return rc;
}