1

我试图弄清楚如何实现 android 数据库游标来包装“ORMed”数据库层。

要在 MonoDroid 中使用 ORM,我们可以使用sqlite-net项目(非常轻量级的 ORM)或ServiceStack.OrmLite

我的想法是实现ICursor接口和“包装”ORM 现在我只是无法在脑海中设定它应该如何工作,以及它是否应该工作。它应该加载“框架”的结果集,还是一个一个地获取它?哪个对性能更好,如何获取列值 - 反射或..?

所以,实际上的问题是:有可能吗?任何想法将不胜感激。

谢谢。

4

1 回答 1

1

我不确定您要使用 ICursor 实现解决什么“问题”,也许您应该更具体地了解您要执行的特定任务。ORM 的全部意义(您错过了在 Android 上也支持 SQLite 的这个)是从代码中抽象出整个 RDBMS 范式,并为您提供一个面向对象的范式。

ICursor 从 SQL 查询中返回可更新的结果集——这意味着您必须了解行、结果集、查询和所有这些。ORM 会返回一个对象或对象集合。如果你想更新一个,你更新对象并将其发送回 ORM。

现在我完全承认,有时 ORM 可能无法提供最简洁的机制来执行 SQL 查询可能做得很好的事情。例如,如果您在逻辑上想要“删除昨天在第二个班次期间构建的所有部件”。轻量级 ORM 可能会为您提供所有部分,然后您必须使用 LINQ 或类似方法将其过滤到正确的日期并转移,然后迭代该结果集合以删除每个部分,而使用 SQL 查询您只需传入 a DELETE FROM Parts WHERE BornONDate BETWEEN @start AND @end,但这是一个您面临的权衡取舍。

在某些情况下,ORM 可能会提供一种工具来做你想做的事。例如,在上面链接的 OpenNETCF ORM 中,您可以将 DataStore(如果还没有的话)转换为 SQLDataStore,然后您可以访问 ExecuteNonQuery 方法,从而允许您传入直接的 SQL 语句。如果仍然没有办法将记录集传回给您,因为正如我所说,返回数据库行实际上是对立的或 ORM。

使用 ExecuteNonQuery 之类的东西也存在一些固有风险。如果你想改变你的后备存储,比如从像 SQLite 这样的 RDBMS 到完全不同的东西,比如对象数据库、XML 文件或其他东西,那么你构建和使用 SQL 查询的代码就会中断。诚然,这可能并不常见,但如果代码可移植性和可扩展性在您的关注范围内,那么至少需要牢记这一点。

于 2012-04-24T13:05:41.160 回答