sqlite-net-extensions - Создать асинхронную таблицу - PullRequest
0 голосов
/ 25 сентября 2018

Моя проблема в том, что я использую метод CreateTableAsync и всегда возвращает «0».Я исследовал и увидел, что это возвращение является ошибкой.

Я хотел знать, что я делаю неправильно.

Таблица обслуживания класса:

public class SqliteTable
{
    private readonly SqliteWrapper _sqliteWrapper;

    public SqliteTable()
    {
        _sqliteWrapper = new SqliteWrapper();
    }

    private async Task<bool> CheckIfExistTable<T>() where T : new()
    {
        var connection = _sqliteWrapper.OpenDatabase();
        try
        {
            var result = await connection.Table<T>().CountAsync();
            return result.Equals(0);
        }
        catch (Exception e)
        {
            Logs.Logs.Error($"Error get count table {typeof(T).Name}: {e.Message}");
            return false;
        }
    }

    public async void CreateTable<T>() where T : new()
    {
        var connection = _sqliteWrapper.OpenDatabase();

        if (await CheckIfExistTable<T>())
        {
            Logs.Logs.Info($"This table {typeof(T).Name} was created");
            return;
        }

        var createTableResult = await connection.CreateTableAsync<T>();
        var value = createTableResult.Results.Values.FirstOrDefault();

        if (value.Equals(1))
        {
            Logs.Logs.Info($"Create table {typeof(T).Name}");
        }
        else
        {
            throw new Exception($"Error create table {typeof(T).Name}");
        }
    }
}

Я создаюМодель класса Логин.который будет объектом для создания базы данных.

public class Login
{
    public Login()
    {
    }

    public Login(string user, string password)
    {
        User = user;
        Password = password;
    }

    public Login(int id, string user, string password)
    {
        Id = id;
        User = user;
        Password = password;
    }

    [PrimaryKey, AutoIncrement, Column("login_id")]
    public int Id { get; set; }

    [Unique, NotNull, Column("login_user")]
    public string User { get; set; }

    [NotNull, Column("login_password")] public string Password { get; set; }
}

Я создаю класс CreateTableAsync.Что было бы интансифицировать SqliteTable, вызвать метод CreateTable, отправляющий объект для создания базы данных:

protected override void OnStart()
    {
        try
        {
            var sqliteTable = new SqliteTable();
            sqliteTable.CreateTable<Login>();
        }
        catch (Exception e)
        {
            Logs.Logs.Error($"Error init application: {e.Message}");
        }
    }

Может кто-нибудь мне помочь?

...