首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在akavache列表对象中更新/插入/删除项?

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

Stack Overflow用户
提问于 2017-01-30 19:01:15
回答 1查看 3.7K关注 0票数 1

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

代码语言:javascript
复制
   CacheItems= await BlobCache.LocalMachine.GetOrFetchObject<List<Item>>("CacheItems",
                  async () => await getdatafromAzure(recursive)); 

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

EN

回答 1

Stack Overflow用户

发布于 2017-01-31 06:36:10

任何保存到LocalMachine的内容都会物理地保存到设备上。因此,在应用程序或设备重启时,它仍然存在(如果用户没有删除应用程序或清除已有的数据)

至于如何访问/保存,这里有很多很好的示例https://github.com/akavache/Akavache

Insert Object和Get Object是您的基本访问方法,还有许多扩展方法,如GetOrFetch、GetAndFetch,它们非常有用

这是一个我还没有超级测试过的快速样本,它提供了一种访问内容的方法。使用一些扩展方法可能会更好,但我认为这样的示例在概念上是有用的。

代码语言:javascript
复制
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上或存储在某个服务类中。然后,当对对象进行任何更改时,我只需将其插入到缓存中

代码语言:javascript
复制
BlobCache.LocalMachine.InsertObject(someKEy, result).Subscribe()

在这一点上,我现在知道,如果应用程序关闭,当用户启动应用程序时,我将拥有该对象的最新版本

我给出的例子更多的是完整的Rx访问方式...您在原始问题中的内容可以正常工作

代码语言:javascript
复制
        await BlobCache.LocalMachine.GetOrFetchObject<List<object>>("CacheItems",
              async () => await getdatafromAzure(recursive));

这将基本上检查缓存,如果它不存在,那么它将转到Azure...

LocalMachine存储到物理设备,InMemory只是存储到一些内部字典中,一旦应用程序从内存中卸载,这些字典就会消失,而UserAccount则使用NT远程处理帐户。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41934261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档