如何更新/插入/删除akavache列表对象中的项目?

时间:2017-01-30 11:01:15

标签: xamarin.forms akavache

我应该在我的xamarin表单应用程序中使用akavache作为主本地数据库,还是在另一个sqlite数据库之上使用缓存数据库?因为我无法找到如何在akavache对象中更新,插入,删除数据的任何示例。例如,

   CacheItems= await BlobCache.LocalMachine.GetOrFetchObject<List<Item>>("CacheItems",
                  async () => await getdatafromAzure(recursive)); 

我从azure获取商品并存储在本地机器中,这些商品是可编辑/可删除的,或者用户可以添加新商品。我该怎么做?

1 个答案:

答案 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远程帐户一起使用。