Ошибка создания базы данных с SQLite из файла JSON - PullRequest
0 голосов
/ 12 сентября 2018

Мои модели GasStation

using Newtonsoft.Json;
using SQLite;
using System;
using System.Collections.Generic;
using System.Text;

namespace TDEv2.Models
{
    public class GasStation
    {
        [JsonProperty("costcentre")]
        public string CostCentre { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("id")][PrimaryKey][AutoIncrement]
        public string Id { get; set; }
    }
}

и:

using System;
using System.Collections.Generic;
using System.Text;

namespace TDEv2.Models
{
    public class GasStationQuery
    {
        public GasStation[] GasStations { get; set; }
    }
}

Мои App.xaml.cs:

using System;
using System.IO;
using TDEv2.Data;
using TDEv2.Views;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace TDEv2
{
    public partial class App : Application
    {
        public static GasStationDatabase database;

        public App ()
        {
            InitializeComponent();
            MainPage = new MainPage();
        }

        public static GasStationDatabase Database
        {
            get
            {
                if (database == null)
                {
                    database = new GasStationDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "GasStationSQLite.db3"));
                }
                return database;
            }
        }

        protected override void OnStart ()
        {
            // Handle when your app starts
        }

        protected override void OnSleep ()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume ()
        {
            // Handle when your app resumes
        }
    }
}

Это мой GasStationDatabase

using SQLite;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using TDEv2.Models;

namespace TDEv2.Data
{
    public class GasStationDatabase
    {

        public SQLiteAsyncConnection database;

        public GasStationDatabase(string dbPath)
        {
            database = new SQLiteAsyncConnection(dbPath);
            try
            {
                database.CreateTableAsync<GasStation>().Wait();
            } catch (AggregateException ae)
            {
                Console.WriteLine("123;" + ae.Flatten().InnerExceptions);
            }
        }

        public Task<List<GasStation>> GetItemsAsync()
        {
            return database.Table<GasStation>().ToListAsync();
        }

        public Task<GasStation> GetItemAsync(string id)
        {
            return database.Table<GasStation>().Where(i => i.Id == id).FirstOrDefaultAsync();
        }

        public Task<int> SaveItemAsync(GasStation gasStation)
        {
            if (gasStation.Id != null)
            {
                return database.UpdateAsync(gasStation);
            } else
            {
                return database.InsertAsync(gasStation);
            }
        }

    }
}

Это мой InitialAsyncGasStationDatabase для первоначального создания базы данных.

using Newtonsoft.Json;
using System.Net;
using TDEv2.Models;

namespace TDEv2.Services
{
    public class InitialAsyncGasStationDatabase
    {
        public GasStationQuery InitialAsyncGasStationsToDatabase()
        {
            string json;
            using (WebClient client = new WebClient())
            {
                json = client.DownloadString($"http://xxx/gasstations.json");
            }

            var data = JsonConvert.DeserializeObject<GasStationQuery>(json);

            foreach (GasStation gasStation in data.GasStations)
            {
               App.Database.SaveItemAsync(gasStation);
            }
            return data;
        }
    }
}

Благодаря отладке я обнаружил, что мой код перестает работать в GasStationDatabase на database.CreateTableAsync<GasStation>().Wait(); Как вы можете видетьЯ пытался поймать AggregateExecption, но все, что он говорит, это ошибка "System.Collections.ObjectModel.ReadOnlyCollection`1 [System.Exception]".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...