Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 手机版的Universal App似乎在卸载后仍在缓存数据库_C#_Windows Phone 8.1_Win Universal App_Sqlite Net - Fatal编程技术网

C# 手机版的Universal App似乎在卸载后仍在缓存数据库

C# 手机版的Universal App似乎在卸载后仍在缓存数据库,c#,windows-phone-8.1,win-universal-app,sqlite-net,C#,Windows Phone 8.1,Win Universal App,Sqlite Net,我正在开发一个使用SQLite的通用应用程序,我已经开始使用SQLite for Windows Runtime(Windows Phone 8.1)和SQLite net 我用它来检查数据库是否存在: bool exists = true; try { var file = await ApplicationData.Current.LocalFolder.GetFileAsync( "database.db" ); } catch { exists = false; }

我正在开发一个使用SQLite的通用应用程序,我已经开始使用SQLite for Windows Runtime(Windows Phone 8.1)和SQLite net

我用它来检查数据库是否存在:

bool exists = true;

try {
    var file = await ApplicationData.Current.LocalFolder.GetFileAsync( "database.db" );
} catch {
    exists = false;
}
如果未运行某些插入查询来填充默认数据:

if( !exists ) {
    var conn = new SQLiteConnection( "database.db );
    conn.CreateTable<MyClass>();
    MyClass.Insert( "Default data value" );
}
如果(!存在){
var conn=新的SQLiteConnection(“database.db”);
conn.CreateTable();
插入(“默认数据值”);
}
我的班级在哪里

[Table( "MyClass" )]
public class MyClass {
    public MyClass() {
        this.ID = -1;
        this.Name = string.Empty;
    }

    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }

    [NotNull]
    public string Name { get; set; }

    internal static void Insert( string Name ) {
        var myclass = new MyClass();
        myclass.Name = Name;

        var conn = new SQLiteConnection( "database.db" );

        try {
            if( myclass.ID == -1 ) conn.Insert( myclass );
        } catch { }
    }

    public async static Task<List<MyClass>> List() {
        var conn = new SQLiteAsyncConnection( "database.db" );
        var rs = conn.Table<MyClass>().OrderBy( t => t.ID );
        return await rs.ToListAsync();
    }
}
[表(“MyClass”)]
公共类MyClass{
公共MyClass(){
这个.ID=-1;
this.Name=string.Empty;
}
[主密钥,自动增量]
公共int ID{get;set;}
[非空]
公共字符串名称{get;set;}
内部静态空白插入(字符串名称){
var myclass=新的myclass();
myclass.Name=Name;
var conn=newsqliteconnection(“database.db”);
试一试{
if(myclass.ID==-1)conn.Insert(myclass);
}捕获{}
}
公共异步静态任务列表(){
var conn=新的SQLiteAsyncConnection(“database.db”);
var rs=conn.Table().OrderBy(t=>t.ID);
返回等待rs.ToListSync();
}
}
问题是每次我执行新部署(从测试设备卸载后),代码正确地确定数据库不存在并执行插入时,我留下的记录数都在增加。更具体地说,我执行的是四个默认值的插入,但在我上次部署时,该表当前有124条记录(这意味着我已经部署了31次)查看数据,重复了相同的四个值


似乎数据库正在缓存到某个位置。我已运行Windows Phone Power Tools,并验证卸载后没有文件。我是否遗漏了某些内容?

我不久前遇到过类似问题(尽管不是使用SQLite)。请尝试选中WMAppManifest.xml(打包选项卡)中的“禁用自动备份/还原”复选框


但一般来说,
newsqliteconnection(“database.db”)
本身并不保证创建新文件,而且您的代码当前也不确保该文件不存在:您正在捕获所有异常,而您的条件仅由
FileNotFoundException
覆盖-
GetFileAsync
可能由于文件不存在以外的其他原因而失败。我建议使用catc首先处理
FileNotFoundException
exception,还可能在代码中显式创建文件。

您如何知道插入了额外的行?您是否有一些
db.Query
函数未显示在某个地方?@ChubosaurusSoftware为了简单起见,我在这里发布的类被编辑了下来。但是,是的,我有我有一个用于填充组合框的方法。我已将其添加到上面的代码中。您可以在安装后使用Windows Phone Power Tools下载DB文件,并将其加载到类似SQLiteBrowser的工具中,以检查发生了什么。