1

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

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

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

4

1 回答 1

5

保存到 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 远程帐户一起使用。

于 2017-01-30T22:36:09.820 回答