访问/创建/写入多个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"
通过读取错误,您应该尝试以下操作:
public class DataAccessSQLite<T> : IDisposable
where T : class
where T : class
是一个泛型约束,它指定T
是引用类型,不能是值类型。