【问题标题】:Subscribe to all changes with detailed info使用详细信息订阅所有更改
【发布时间】:2017-08-15 03:36:26
【问题描述】:

使用详细信息跟踪所有更改对我们来说至关重要:操作类型(创建、更新或删除)、对象类型、更改的对象(或其 PK,如果有)以及更改的属性。

有没有办法做到这一点?一种解决方法?我们被这个阻止了。使用 Xamarin.iOS。

希望有人可以帮助我们。谢谢!

【问题讨论】:

  • 对于集合,请查看 SubscribeForNotifications 以创建/更改/删除索引,对于单个 RealmObject,将 PropertyChangedEvent 处理程序添加到对象。您始终可以将 RealmObject 子类嵌入到更高级别的模型(数据管理器)中,并让该抽象模型通过 SubscribeForNotifications/PropertyChangedEvent 跟踪请求的每个 RealmObjectIRealmCollection 的所有更改。
  • @SushiHangover 感谢您的快速回答。我知道这些订阅方法,但必须遍历所有检索到的RealmObjects 并订阅它们的更改,以便让更改后的属性也让我觉得很笨拙,还冒着为同一个实体订阅两次的风险,但正确如果我错了。我期待可能更像realm.RealmChanged += (s, e) => { },但会获得更详细的数据,例如对象、操作和更改的属性名称(以防更新)。谢谢!!
  • 如您所见,RealmChanged 不提供该级别的详细信息,该级别的详细信息当前保留用于Mobile Platform 产品中。您可以通过构造undo/redo model 并通过公开模型属性级别的接口来构造实现完整更改日志记录的数据管理器/数据模型,这些属性依次连接到“隐藏的”RealmObject 属性(与 RealmCollections 相同),因此您“请参阅“所有数据更改。在移动平台首次发布之前,我为一个客户做过这件事,因为该应用程序有 HIPAA 要求和远程同步要求。
  • 看起来没有简单的方法。我想过像代理一样连接到领域 obj 以“拦截”更改,但我不确定。我正在重新考虑现有应用程序的数据层(也包括远程同步请求)。它使用了很多连接,感觉 sqlite 不够用,所以我开始考虑 Realm,但我看到这对应用程序有很大影响:检查到处线程,添加更新写入事务,现在不鼓励异步等待,可以'不容易跟踪变化,等等。我现在正在考虑将领域对象映射到模型,但所有领域专家都在这样做,除了加入
  • 恕我直言:这真的取决于您的应用程序需求,Realm 只是工具集中的一个项目,而 Sqlite 绝对有它的位置。 (SQL 为王,众所周知,Realm 仅支持 Linq 的一个子集)。选择适用于您的应用的内容。我编写了“大型”Realm 应用程序(包括只在 iPad Pro 上运行的应用程序)。你注意到的那些你会丢失的问题是可以避免的,但这需要代码、时间和知识。我将 Viper 架构与 Realm/Xamarin 一起使用,并且可以避免失去其 cool 功能,但我在基于 Martin 的干净架构中对 Realm 的了解并不容易,哈哈哈

标签: xamarin realm


【解决方案1】:

您可以订阅特定数据库表的更改

IDisposable sidesSubscription = Realm.GetInstance().All<Side>()
                                .SubscribeForNotifications(OnSidesChanged);

private void OnSidesChanged(IRealmCollection<Side> sender, ChangeSet changes, Exception error)
{
   //handle changes
}

请注意,您需要在带有 looper 的线程(如 UI 线程)上执行此操作,或者在创建 Realm.GetInstance().All&lt;Side&gt;() 集合的线程上调用 Realm.Refresh() 以调用 OnSidesChanged

【讨论】:

  • 感谢您的快速回答。使用您的解决方案,如果正在更新对象,我看不到如何获取修改后的属性...:\
  • 没有预期的方法来获取修改后的属性。充其量您可以订阅特定对象更改的通知。
  • 感谢您的回答
猜你喜欢
  • 2013-07-19
  • 2021-09-28
  • 2021-01-22
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多