【问题标题】:Xamarin SQLite.NET Generic TableQueryXamarin SQLite.NET 通用表查询
【发布时间】:2016-03-29 09:40:57
【问题描述】:

我在我的 Xamarin 项目中使用组件“SQLite.NET”。 我有几个“模型/类”,如“文档”、“项目”。 每个模型在 SQLite 中都有自己的表。

为了从表中获取数据,我使用了以下技术:

List<Document> documents = new SQLiteConnection("..DB-path..").Table<Document>.ToList();

它工作正常,但是对于每个表我必须执行相同的代码,并且只更改上面代码中的模型类型。

现在我想写一个通用的方法,我可以这样做:

List<T> data = new SQLiteConnection("..DB-path..").Table<T>.ToList();

但不幸的是,我收到以下错误:

“T”必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“SQLiteConnection.Table()”中的参数“T”

有人知道为上述问题创建通用方法的方法吗?

提前致谢!

【问题讨论】:

  • 您能否使用泛型类型包含包含您的代码行的整个方法?你如何声明T?附带说明一下,您不需要每次访问数据库时都创建一个新的SQLiteConnection,事实上,使用单例连接被认为是更好的做法。
  • 如果您还想要通用查询,请查看:stackoverflow.com/questions/29050400/…

标签: android xamarin sqlite.net


【解决方案1】:

你应该给你的函数添加约束。

public List<T> GetData<T> () where T: new()
{
    using(var connection = new SQLiteConnection("..DB-path..")){
       return connection.Table<T>.ToList();
    }
}

不要忘记释放你的数据库连接!

【讨论】:

  • 如果同时发生其他并行查询(如果您使用异步查询),有时会抛出连接。我将只使用一个在整个应用程序生命周期中保持打开状态的连接
  • @xleon 没错,我同意你的观点,最好使用一个连接。但是 Benjamin 当前的实现并没有使用这种方法。所以如果你不重用连接,你应该尽快处理它并使用“try-with-resources”。
猜你喜欢
  • 2016-10-29
  • 2014-11-25
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 2018-11-23
  • 2017-10-15
  • 1970-01-01
相关资源
最近更新 更多