2014-11-30 4 views
5

Ich arbeite an einer Universal-App mit SQLite, und ich habe this tutorial zusammen mit SQLite für Windows Runtime (Windows Phone 8.1) und sqLite-net zu verwenden loslegen.Telefon-Version von Universal App scheint Caching-Datenbank auch nach der Deinstallation

ich dies mit überprüfen, ob die Datenbank vorhanden ist:

bool exists = true; 

try { 
    var file = await ApplicationData.Current.LocalFolder.GetFileAsync("database.db"); 
} catch { 
    exists = false; 
} 

und wenn nicht einige Einsatz Ausführen von Abfragen Standard Daten zu füllen:

if(!exists) { 
    var conn = new SQLiteConnection("database.db); 
    conn.CreateTable<MyClass>(); 
    MyClass.Insert("Default data value"); 
} 

wo MyClass ist

[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(); 
    } 
} 

Das Problem ist jedes Mal, wenn ich eine neue Bereitstellung (nach der Deinstallation von meinem Testgerät), und der Code richtig feststellen, dass die Datenbank nicht existiert und führt die Einsätze, ich bin mit einer steigenden Anzahl von Datensätzen. Genauer gesagt, mache ich eine Einfügung von vier Standardwerten, aber bei meiner letzten Implementierung hat diese Tabelle derzeit 124 Datensätze (was bedeutet, dass ich 31 Mal eingesetzt habe) und wenn ich die Daten betrachte, werden die gleichen vier Werte wiederholt. Beim Durchlaufen des Codes treten wie erwartet nur vier Einfügungen auf.

Es scheint, als ob die Datenbank irgendwo zwischengespeichert wird. Ich habe die Windows Phone Power Tools ausgeführt und überprüft, dass nach der Deinstallation keine Dateien vorhanden sind. Fehle ich hier etwas?

+0

Woher wissen Sie, dass zusätzliche Zeilen eingefügt wurden? Haben Sie irgendwo eine "db.Query " Funktion, die Sie nicht anzeigen? –

+0

@ChubosaurusSoftware Die hier angegebene Klasse wurde zur Vereinfachung bearbeitet. Aber ja, ich habe eine Methode, die ich verwende, um eine ComboBox zu füllen. Ich habe es meinem obigen Code hinzugefügt. –

+1

Sie können die Windows Phone Power Tools verwenden, um die DB-Datei nach der Installation herunterzuladen und diese in ein Tool wie SQLiteBrowser zu laden, um zu überprüfen, was vor sich geht. –

Antwort

0

Ich hatte vor einiger Zeit ein ähnliches Problem (obwohl nicht mit SQLite). Versuchen Sie, das Kontrollkästchen "Automatische Sicherung/Wiederherstellung deaktivieren" in WMAppManifest.xml (Registerkarte "Verpackung") zu aktivieren.

Im Allgemeinen jedoch, new SQLiteConnection("database.db"); selbst bietet keine Garantie für eine neue Datei erstellt werden und der Code zur Zeit nicht die Datei sicherzustellen nicht bereits vorhanden ist: Sie alle Ausnahmen fangen, während die Bedingung nur durch FileNotFoundException bedeckt ist - die GetFileAsync kann aus anderen Gründen fehlschlagen als die Datei nicht existiert. Ich würde vorschlagen, die FileNotFoundException Ausnahme zu fangen, und möglicherweise auch die Datei explizit im Code zu verursachen.

Verwandte Themen