2017-12-18 16 views
0

XamarinのRealm for .NETを使用している問題があります。レルム - オブジェクトのコピー/デタッチ方法

通常はオブジェクトを追加、更新、削除できますが、Realm for .NETにはcopyFromRealmオブジェクトがありません。

私のメソッドは、レルムを開いてデータを選択するだけで、このオブジェクトをデータ・レイヤー(データを照会するクラスを使用して別のレイヤーで検証する)を処理する必要があります。

しかし、DeepCloner(ナゲット)を使用しても、レルムは領域が閉じられていると非難していますが、using()命令を使用して閉じています。

オブジェクトを閉じてオブジェクトを操作する前に、オブジェクトを領域からコピーすることは可能です。オブジェクトのデータを読み取るだけで、Realmに再度書き込む必要はありません。

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

https://stackoverflow.com/questions/46628890/exception-when-converting-local-realm-to-synced-realm-in-xamarinios/46629763#46629763 – SushiHangover

+0

ありがとう、これは私の問題を解決する。どうもありがとう。あなたはクレジットを与えるために答えを出すことができますか? AutoMapperからNewtonsoftに変更する理由を説明できますか? –

+0

'AutoMapper'は素晴らしいライブラリです。 AutoMapperやDeepCloneのようなlibの中核的な問題は、一般的なやり方で、コピーしている "レコード"の数や必要なセットアップの数がどれくらい速いのかです。私は** my **のニーズに関連したベンチマークを行いました.Json.Netを使用すると、残りの部分と同じくらい速く、通常は** my **データのために、あなたは大きく違うかもしれません... RealmObjectのサブクラスでもうまく動作します。 R/Wプロパティは簡単ですが、領域 'IList 'を処理し、リンクされたオブジェクトツリーを横断します。 – SushiHangover

答えて

0

はい、そうすることはできません。 DeepCloneが失敗する理由は、基底のRealmObjectクラス(特に、Realm)からプロパティをクローン化するためです。代わりに、自分でクローンメソッドを書くか、ボックス外の読み取り専用プロパティを無視する必要がありますが、わずかに構成が必要なAutoMapperを使用します。

+0

返信のためのThnks、私はいくつかのテストを行い、あなたにフィードバックを与えるでしょう。しかし、少し読んだので、別のDTOを作成する必要があります。代わりに同じクラスを使用する必要があります。 –

+0

別のDTOを作成する必要はありません。AutoMapperは同じクラスにマップしても問題ありません。 –

関連する問題