我应该在我的xamarin表单应用程序中使用akavache作为主本地数据库,还是在另一个sqlite数据库之上使用缓存数据库?因为我无法找到如何在akavache对象中更新,插入,删除数据的任何示例。例如,
CacheItems= await BlobCache.LocalMachine.GetOrFetchObject<List<Item>>("CacheItems",
async () => await getdatafromAzure(recursive));
我从azure获取商品并存储在本地机器中,这些商品是可编辑/可删除的,或者用户可以添加新商品。我该怎么做?
答案 0 :(得分:3)
保存到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上或某些服务类中。然后,当对对象进行任何更改时,我只需将其插入缓存
BlobCache.LocalMachine.InsertObject(someKEy, result).Subscribe()
此时我现在知道如果应用程序关闭,我会在用户启动应用程序时获得该对象的最新版本
我提供的示例更多是完整的Rx访问方式...您在原始问题中所拥有的工作正常
await BlobCache.LocalMachine.GetOrFetchObject<List<object>>("CacheItems",
async () => await getdatafromAzure(recursive));
那基本上会检查缓存,如果它不存在则会转到Azure ...
LocalMachine存储到物理设备,InMemory只存储到一些内部字典,一旦应用程序从内存中卸载就会消失,UserAccount与NT远程帐户一起使用。