2014-11-30 17 views
5

Tôi đang làm việc trên Ứng dụng toàn cầu bằng SQLite và tôi đã sử dụng this tutorial cùng với SQLite cho Windows Runtime (Windows Phone 8.1) và sqLite-net bắt đầu.Phiên bản điện thoại của Universal App có vẻ là bộ nhớ đệm ngay cả sau khi gỡ cài đặt

Tôi đang sử dụng này để kiểm tra xem cơ sở dữ liệu tồn tại:

bool exists = true; 

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

và nếu không chạy một số truy vấn chèn để cư dữ liệu mặc định:

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

nơi MyClass là

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

Vấn đề là mỗi lần tôi triển khai mới (sau khi gỡ cài đặt từ thiết bị thử nghiệm của tôi) và mã chính xác xác định cơ sở dữ liệu không tồn tại và thực hiện chèn, tôi còn lại với một số lượng ngày càng tăng của hồ sơ. Cụ thể hơn, tôi đang thực hiện chèn bốn giá trị mặc định, nhưng tại lần triển khai cuối cùng của tôi, bảng hiện có 124 bản ghi (nghĩa là tôi đã triển khai 31 lần) và xem dữ liệu, nó lặp lại bốn giá trị. Bước qua mã, chỉ có bốn chèn đang xảy ra, như mong đợi.

Dường như cơ sở dữ liệu đang được lưu trữ ở đâu đó. Tôi đã chạy Windows Phone Power Tools và đã xác minh không có tệp nào sau khi gỡ cài đặt. Am i thiếu cái gì ở đây?

+0

Làm thế nào để bạn biết thêm hàng đã được chèn? Bạn có một số chức năng 'db.Query ' ở đâu đó mà bạn không hiển thị? –

+0

@ChubosaurusSoftware Lớp tôi đăng ở đây đã được chỉnh sửa để đơn giản. Nhưng có, tôi có một phương pháp tôi sử dụng để cư một ComboBox. Tôi đã thêm nó vào mã của tôi ở trên. –

+1

Bạn có thể sử dụng Windows Phone Power Tools để tải xuống tệp DB sau khi cài đặt và tải tệp đó vào một công cụ như SQLiteBrowser để kiểm tra những gì đang diễn ra. –

Trả lời

0

Tôi đã gặp sự cố tương tự một thời gian trước (mặc dù không phải với SQLite). Hãy thử kiểm tra hộp kiểm "Vô hiệu hóa sao lưu/khôi phục tự động" trong WMAppManifest.xml (tab Bao bì).

Nói chung, bản thân không tự đảm bảo tệp mới được tạo và mã của bạn hiện không đảm bảo tệp chưa tồn tại: bạn đang bắt tất cả ngoại lệ trong khi điều kiện của bạn chỉ được bao gồm FileNotFoundException - GetFileAsync có thể không thành công vì các lý do khác ngoài tệp không tồn tại. Tôi sẽ đề nghị bắt ngoại lệ FileNotFoundException để bắt đầu và cũng có thể tạo tệp một cách rõ ràng trong mã.

Các vấn đề liên quan