我正在试图弄清楚如何使用android数据库Cursor实现包装“ORMed”数据库层。
要在MonoDroid中使用ORM,我们可以使用sqlite-net项目(非常轻量级的ORM)或ServiceStack.OrmLite
我的想法是实现ICursor接口和“包装”ORM 现在,我无法在脑海中设置它应该如何工作,并且它是否能够正常工作。 它应该加载“框架”结果集,还是逐个获取? 哪个更好的性能,如何获得列值 - 反射或..?
所以,实际上问题是:它有可能吗? 任何想法都将不胜感激。
感谢。
答案 0 :(得分:1)
我不确定你试图通过ICursor实现解决什么“问题”,也许你应该更具体地说明你正在尝试做什么具体的任务。 ORM的整个要点(你错过了this one that also supports SQLite on Android)是从代码中抽象出整个RDBMS范例,而是给你一个面向对象的范例。
ICursor会从SQL查询中返回可更新的结果集 - 这意味着您必须了解行,结果集,查询以及所有这些内容。 ORM返回一个对象或一组对象。如果要更新一个,则更新对象并将其发送回ORM。
现在我完全承认,有些时候ORM可能无法提供最干净的机制来执行SQL查询可能做得很好的事情。例如,如果您在逻辑上想要“删除在第二班期间建立的所有零件”。轻量级ORM可能会为您提供所有部分,然后您必须使用LINQ或类似方法过滤到正确的日期并移位,然后迭代生成的集合以删除每个部分,而使用SQL查询,您只需传入{{1} },但这是你面临的权衡之一。
在某些情况下,ORM可能会提供您想要的设施。例如,在上面链接的OpenNETCF ORM中,您可以将DataStore(如果尚未)转换为SQLDataStore,然后您可以访问ExecuteNonQuery方法,从而允许您传入直接的SQL语句。如果仍然没有办法将你传回记录集,因为正如我所说,返回数据库行实际上是对立面或ORM。
使用像ExecuteNonQuery这样的东西也存在一些固有的风险。如果你想改变你的后备存储,从像SQLite这样的RDBMS到完全不同的东西,如对象数据库,XML文件或其他东西,那么构建和使用SQL查询的代码就会中断。不可否认,这可能并不常见,但如果代码可移植性和可扩展性以及您的雷达,那么至少要记住这一点。