2014-11-30 10 views
5

Sto lavorando su un'app universale utilizzando SQLite e ho utilizzato this tutorial insieme a SQLite per Windows Runtime (Windows Phone 8.1) e sqLite-net a iniziare.La versione telefonica di Universal App sembra essere il database di cache anche dopo la disinstallazione

Sto usando questo per verificare se il database esiste:

bool exists = true; 

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

e se non è in esecuzione alcune query di inserimento per popolare i dati di default:

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

dove MyClass è

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

Il problema è ogni volta che eseguo una nuova distribuzione (dopo la disinstallazione dal mio dispositivo di test) e il codice correttamente determinare il database non esiste ed esegue gli inserimenti, mi rimane un numero crescente di record. Più specificamente, sto facendo un inserimento di quattro valori predefiniti, ma alla mia ultima distribuzione quella tabella ha attualmente 124 record (cioè ho distribuito 31 volte) e guardando i dati, sono gli stessi quattro valori ripetuti. Passando attraverso il codice, si verificano solo quattro inserimenti, come previsto.

Sembra che il database sia stato memorizzato nella cache da qualche parte. Ho eseguito gli strumenti di alimentazione di Windows Phone e verificato che non ci siano file dopo la disinstallazione. Mi sto perdendo qualcosa qui?

+0

Come fai a sapere che sono state inserite altre righe? Hai qualche funzione 'db.Query ' da qualche parte che non stai mostrando? –

+0

@ChubosaurusSoftware La classe che ho postato qui è stata modificata per semplicità. Ma sì, ho un metodo che uso per compilare un ComboBox. L'ho aggiunto al mio codice qui sopra. –

+1

È possibile utilizzare gli strumenti di accensione di Windows Phone per scaricare il file DB dopo l'installazione e caricarlo in uno strumento come SQLiteBrowser per verificare cosa sta succedendo. –

risposta

0

Ho avuto un problema simile qualche tempo fa (anche se non con SQLite). Prova a selezionare la casella di controllo "Disabilita backup/ripristino automatico" in WMAppManifest.xml (scheda Packaging).

In generale, comunque, new SQLiteConnection("database.db"); di per sé non garantisce un nuovo file da creare e il codice attualmente non che il file non esiste già: si stanno recuperando tutte le eccezioni, mentre la sua condizione è coperto solo da FileNotFoundException - il GetFileAsync potrebbe non riuscire per altri motivi rispetto al file non esistente. Suggerisco di prendere l'eccezione FileNotFoundException per iniziare e, eventualmente, anche di creare il file esplicitamente nel codice.

Problemi correlati