我应该在我的xamarin forms应用程序中使用akavache作为主要本地数据库,还是应该在另一个sqlite数据库之上使用缓存数据库?因为我找不到任何关于如何在akavache对象中更新、插入、删除数据的例子。例如,
CacheItems= await BlobCache.LocalMachine.GetOrFetchObject<List<Item>>("CacheItems",
async () => await getdatafromAzure(recursive));
我正在从azure获取项目并存储在本地计算机中,这些项目是可编辑/可删除的,或者用户可以添加新项目。我该怎么做呢?
发布于 2017-01-31 06:36:10
任何保存到LocalMachine的内容都会物理地保存到设备上。因此,在应用程序或设备重启时,它仍然存在(如果用户没有删除应用程序或清除已有的数据)
至于如何访问/保存,这里有很多很好的示例https://github.com/akavache/Akavache
Insert Object和Get Object是您的基本访问方法,还有许多扩展方法,如GetOrFetch、GetAndFetch,它们非常有用
这是一个我还没有超级测试过的快速样本,它提供了一种访问内容的方法。使用一些扩展方法可能会更好,但我认为这样的示例在概念上是有用的。
BlobCache.LocalMachine.GetObject<Tobject>(someKEy)
.Catch((KeyNotFoundException ke) => Observable.Return<Tobject>(null))
.SelectMany(result =>
{
//object doesn't exist in cache so create a new one
if (result == null)
result = new Tobject();
//apply whatever updates you are wanting to do
//result.SomeField = "bob";
//This will replace or insert data
return BlobCache.LocalMachine.InsertObject(someKEy, result);
})
.Subscribe();
这真的是非常无聊的东西:-p只需要获取一个对象并存储一个对象。在引擎盖下,Akavache围绕那些无聊的东西做了很多非常酷的优化和同步,尽管允许它对我们其余的人来说是无聊的
在我的大多数情况下,当我启动VM时,我会从缓存中检索对象,然后将其作为某个属性存储在VM上或存储在某个服务类中。然后,当对对象进行任何更改时,我只需将其插入到缓存中
BlobCache.LocalMachine.InsertObject(someKEy, result).Subscribe()
在这一点上,我现在知道,如果应用程序关闭,当用户启动应用程序时,我将拥有该对象的最新版本
我给出的例子更多的是完整的Rx访问方式...您在原始问题中的内容可以正常工作
await BlobCache.LocalMachine.GetOrFetchObject<List<object>>("CacheItems",
async () => await getdatafromAzure(recursive));
这将基本上检查缓存,如果它不存在,那么它将转到Azure...
LocalMachine存储到物理设备,InMemory只是存储到一些内部字典中,一旦应用程序从内存中卸载,这些字典就会消失,而UserAccount则使用NT远程处理帐户。
https://stackoverflow.com/questions/41934261
复制相似问题