sqlite-net-extensions-创建表异步

时间:2018-09-24 21:38:26

标签: sqlite xamarin 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。这将是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}");
        }
    }

有人可以帮我吗?

0 个答案:

没有答案