首页 > 解决方案 > sqlite-net-extensions -- 创建表异步

问题描述

我的问题是我正在使用 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。这将是 intanciar 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}");
        }
    }

有人能帮我吗?

标签: sqlitexamarinsqlite-net-extensions

解决方案


推荐阅读