2017-12-22 13 views
1

私はレルムには新しく、ネストしたオブジェクトを保存するのには多くの問題があります。私は親を救うことができますが、Realms.Exceptions.RealmObjectManagedByAnotherRealmExceptionCannot start to manage an object with a realm when it's already managed by another realmとなります。私は1つの領域しか持たず、新しいオブジェクトを作成しています!.Net内のレルムデータベースにネストされたオブジェクトを保存する

これは、親クラスが次のようになります。

public class Transaction : RealmObject 
{ 
    [PrimaryKey] 
    public string ID { get; set; } = Guid.NewGuid().ToString(); 
    ... 
    public IList<TransactionDetails> Rows { get; } 

} 

、ここの子供である:

私は私が持っているオブジェクトを保存しようとしているクラスのコンストラクタで
public class TransactionDetails : RealmObject 
{ 
    [PrimaryKey] 
    public string ID { get; set; } = Guid.NewGuid().ToString(); 
    public Account Account { get; set; } = new Account(); 
    public double Amount { get; set; } 
    ... 
} 

realm = Realm.GetInstance(config);

これは最新の試みで、別の書き込みトランザクションで詳細を書き込もうとしましたが、動作しませんでした。

var transaction = new Models.Transaction(); 
... 

realm.Write(() => realm.Add(transaction, update: true)); 

foreach (var details in Trans.Rows) 
{ 
    var row = new TransactionDetails(); 
    ... 

    //realm.Add(details); 
    //realm.Write(() => realm.Add(details)); 
    realm.Write(() => transaction.Rows.Add(details)); // Error here every time   
} 

documentationはまったく役に立たなかった。

+0

高レベルでは、これが動作しない理由はありません。私はそれが問題の原因となっているあなたが提供していないコードの何かであると想像します。たとえば、 'TransactionDetails'クラスには' Account'リファレンスがあり、おそらく他の関連オブジェクトもあります。しかし、これらの質問に答えるにはあまり適していないので、Github(https://github.com/realm/realm-dotnet/issues)の問題を開いて、調査できるように理想的に再プロジェクトプロジェクトを提供することをお勧めします。 –

+0

さて、Nikolaに感謝します。 – mack

答えて

0

書き込みは一度だけ行う必要があります。

var transaction = new Models.Transaction(); 
... 

foreach (var details in Trans.Rows) 
{ 
    var row = new TransactionDetails(); 
    ... 

    transaction.Rows.Add(details); // Error here every time   
} 

realm.Write(() => realm.Add(transaction, update: true)); 

これをトランザクションでラッピングする方がよいでしょう。

using (Transaction _transaction = realm.BeginWrite()) 
{ 
    var trans = new Models.Transaction(); 
    ... 

    realm.Add(trans); 

    foreach (var details in Trans.Rows) 
    { 
     var row = new TransactionDetails(); 
     ... 

     trans.Rows.Add(details); // Error here every time   
    } 
    _transaction.Commit(); 
} 

レルムとXamarinフォームを使用してアプリを作成しました。コードはGitHub、https://github.com/rsatter/PRO-PD/tree/master/PRO-PDで公開されています。

+0

ありがとう@ラビ、私はアプリをチェックアウトします。 – mack

関連する問題