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?
Skąd wiesz, że dodano dodatkowe rzędy? Czy masz jakąś funkcję 'db.Query', której nie wyświetlasz? –
@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. –
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. –