2014-11-30 20 views
5

Pracuję nad aplikacją Universal przy użyciu SQLite, a także korzystam z this tutorial wraz z SQLite dla Windows Runtime (Windows Phone 8.1) i sqLite-net dla zaczynać.Telefoniczna wersja aplikacji Universal wydaje się być bazą danych buforowania nawet po odinstalowaniu

używam to, by sprawdzić, czy w bazie istnieje:

bool exists = true; 

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

a jeśli nie działa kilka zapytań Włożyć do zapełniania domyślne dane:

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

gdzie MyClass jest

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

Problem jest za każdym razem, gdy robię nową instalację (po odinstalowaniu z mojego urządzenia testowego), a kod poprawnie określić, że baza danych nie istnieje i wykonuje inserty, pozostało mi coraz więcej rekordów. Dokładniej, robię wstawienie czterech domyślnych wartości, ale przy mojej ostatniej instalacji ta tabela ma obecnie 124 rekordy (czyli rozmieściłem 31 razy) i patrząc na dane, to te same cztery wartości powtarzane. Wychodząc z kodu, zgodnie z oczekiwaniami pojawiają się tylko cztery wstawki.

Wygląda na to, że baza danych jest gdzieś buforowana. Uruchomiłem Narzędzia elektryczne systemu Windows Phone i potwierdziłem, że po odinstalowaniu nie ma plików. Czy coś mi umyka?

+0

Skąd wiesz, że dodano dodatkowe rzędy? Czy masz jakąś funkcję 'db.Query ', której nie wyświetlasz? –

+0

@ChubosaurusSoftware Klasa, którą tu zamieściłem, została zredagowana dla uproszczenia. Ale tak, mam metodę, której używam do zapełniania ComboBox. Dodałem go do mojego kodu powyżej. –

+1

Możesz użyć narzędzi elektrycznych systemu Windows Phone, aby pobrać plik DB po instalacji i załadować go do narzędzia takiego jak SQLiteBrowser, aby sprawdzić, co się dzieje. –

Odpowiedz

0

Miałem podobny problem jakiś czas temu (chociaż nie z SQLite). Spróbuj zaznaczyć pole wyboru "Wyłącz automatyczne tworzenie kopii zapasowych/przywracanie" w pliku WMAppManifest.xml (karta Pakowanie).

Na ogół jednak, new SQLiteConnection("database.db"); sam nie gwarantuje nowy plik tworzony i kod aktualnie nie zapewniają plik nie istnieje: jesteś połowu wszystkie wyjątki w czasie, gdy warunek jest objęte jedynie FileNotFoundException - w GetFileAsync może zawieść z innych powodów, niż plik nie istnieje. Proponuję uchwycić wyjątek FileNotFoundException, a być może także utworzyć plik jawnie w kodzie.