从通用 "list of items" 填充 SQLite 数据库

Populate SQLite database from generic "list of items"

我使用 SQLite 数据库用 TodoItems 的通用列表填充列表视图:

ListView.ItemsSource = await App.Database.GetItemsAsync("SELECT * FROM [TodoItem]");

我可以使用 HttpClient class 以及通过

从数据库源读取同类数据
public async Task<List<TodoItem>> ReadDataAsync ()

....
    Items = new List<TodoItem> ();
....
    var content = await response.Content.ReadAsStringAsync ();
    Items = JsonConvert.DeserializeObject <List<TodoItem>> (content);
....
    return Items;

之后我也可以将其用作数据源:

ListView.ItemsSource = await App.ReadDataAsync();

两种方式都很好。

我现在想要的是结合这两个例程来完成一个代码,检查我们是否有在线连接,如果是,则删除数据库并使用上面的 ReadDataAsync 的结果填充它,如果没有,则保留数据库.

我发现没有办法直接将列表分配到我的数据库,覆盖所有内容,我想到了这样的事情:

App.Database.Items = await App.ReadDataAsync();

但 SQLite 似乎没有直接公开数据存储。我怎样才能做到这一点?

例如android,您可以尝试:不需要删除数据库。

           //Check for internet connection 
            var connectivityManager = 
             (ConnectivityManager)this.GetSystemService("connectivity");
            var activeConnection = connectivityManager.ActiveNetworkInfo;
            if ((activeConnection != null) && activeConnection.IsConnected)
            {
                //Make call to the API
                var list = await App.ReadDataAsync();
                //Update or Insert local records
                foreach (var item in list)
                {
                    var success = UpdateOrInsert(item);
                    //Do something after - like retry incase of failure
                }
            } 

UpdatedOrInsert 方法可以如下所示:

     private bool UpdateOrInsert(TodoItem item)
     {
        var rowsAffected = App.Database.Update(item);
        if (rowsAffected == 0)
        {
            // The item doesn't exist in the database, therefore insert it
            rowsAffected = App.Database.Insert(item);
        }
        var success = rowsAffected > 0;
        return success;
     }