访问/创建/写入多个SQLite表(通用SQLiteHelper)

本文关键字:通用 SQLiteHelper SQLite 创建 访问 | 更新日期: 2023-09-27 18:12:03

我目前正在重构我的Xamarin应用程序,以便在设备中保留一些数据。

我已经创建了我的表(14),连接类,现在我有一些麻烦与DataAccess (Helper)类。我必须使它通用,因为我们讨论的是14个表,而且所有的CRUD操作似乎都工作得很好。

但是"GetById"answers"List"方法不起作用,因为它说我传递的泛型类型"T"必须是引用类型才能将其用作参数:

    public class DataAccessSQLite<T> : IDisposable{
    public SQLiteConnection connection;
    public DataAccessSQLite()
    {
        var config = DependencyService.Get<ISQLConfig>();
        connection = new SQLiteConnection(config.Platform, config.Database);
        connection.CreateTable<T>();
    }
    public void Insert(T model)
    {
        connection.Insert(model);
    }
    public void Delete(T model)
    {
        connection.Delete(model);
    }
    public void Update(T model)
    {
        connection.Update(model);
    }
    public T GetbyId(int id)
    {
        //HERE IS THE ERROR:
        return connection.Table<T>().FirstOrDefault(x => x.Id == id);
    }
    public List<T> ToList()
    { 
        //ALSO HERE
        return connection.Table<T>().OrderBy().ToList();
    }
    public void Dispose()
    {
        connection.Dispose();
    }
}

我正在考虑实现一个单例方法来访问所有的表,但不确定我将如何做到这一点。

我知道我现在使用的通用方法(T)无论如何都不会对GetById起作用,因为他不可能知道通过传递"T"来获得什么Id。所以我需要用另一种方法来做。

如何使这个类泛型,以便通过它访问所有的表?

ERROR I´M GETTING: 类型'T'必须是引用类型,以便在泛型类型或方法'SQLiteConnection.Table()'中作为参数'T'使用


更新:

使用where T: class解决了我得到的错误,但我仍然无法通过传递"T"

访问/创建/写入多个SQLite表(通用SQLiteHelper)

从表中获得Id

通过读取错误,您应该尝试以下操作:

public class DataAccessSQLite<T> : IDisposable
    where T : class

where T : class是一个泛型约束,它指定T是引用类型,不能是值类型。