【问题标题】:Realm .NET - How to copy/detach an objectRealm .NET - 如何复制/分离对象
【发布时间】:2017-12-18 19:11:33
【问题描述】:

我在 Xamarin 中使用 Realm for .NET 时遇到问题。

我可以正常添加、更新和删除对象,但同样的 java,.NET 的 Realm 没有 copyFromRealm 对象。

我的方法只是打开领域,选择数据,我需要在数据层之外处理这个对象(我正在使用一个类来查询数据并在另一个层中验证它)。

但即使使用 DeepCloner (nuget),领域也会抛出异常,指责领域已关闭,但我使用 .NET 的 using() 指令将其关闭。

我可以在关闭和操作该对象之前从领域复制一个对象。我只需要读取对象中的数据,而不是再次将其写入 Realm。

using(var realm = Realm.GetInstance(config))
{
    var data = realm.All<DadosUsuario>().FirstOrDefault().ShallowCopy();
}

【问题讨论】:

  • 非常感谢,这解决了我的问题。非常感谢。你能回答给你学分吗?您能解释一下为什么从 AutoMapper 改为 Newtonsoft 吗?
  • AutoMapper 是一个很棒的库。像 AutoMapper、DeepClone 这样的库的核心问题......它们是否以通用方式工作,它们复制的“记录”数量有多快,以及它们需要多少设置。我已经完成了一系列与 my 需求相关的基准测试,并且使用 Json.Net 进行深度复制的速度通常与其他的一样快,同样对于 my 数据,您可以完全不同......而且它也适用于 RealmObject 子类; R/W 属性很简单,但它处理领域IList&lt;T&gt; 并横穿链接的对象树。
  • 还有许多其他考虑因素,例如它们在 GC 上的难度(它们是否创建了一堆临时/过渡对象)等等。我敢肯定在某些情况下会击败其他用于特定使用模式的情况,在这些情况下,通常通过分析应用程序发现,您可以在不同的库中子库或仅手动处理创建副本,因此您可以将代码调整为您的使用模式...... .
  • 非常感谢您的解释。考虑到我的情况,它的工作方式完美无缺,所以对我来说没关系。但是当我需要时,我会使用我的测试用例制作一些配置文件和基准测试。再次,非常感谢。

标签: c# xamarin realm


【解决方案1】:

是的,没有理由不这样做。 DeepClone 失败的可能原因是它从基础 RealmObject 类中克隆了属性(最值得注意的是Realm)。相反,您可以自己编写 clone 方法,也可以使用 AutoMapper,它应该忽略开箱即用的只读属性,但需要稍微多一些配置。

【讨论】:

  • 感谢您的回复,我会做一些测试并给您反馈。但是由于我读了一点,我需要创建另一个DTO,我需要使用相同的类来代替。
  • 你不需要创建不同的 DTO - AutoMapper 可以映射到同一个类就好了。
【解决方案2】:

对于其他正在寻找方法的人来说,here 描述的第一种方法对我们来说效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2018-09-27
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多