我是 Realm 新手,在保存嵌套对象时遇到了很多麻烦。我可以保存父级,但我得到一个 Realms.Exceptions.RealmObjectManagedByAnotherRealmException
说 Cannot start to manage an object with a realm when it is already managed by another realm
。我只有一个 Realm ,我正在创建一个新对象!
这是父类的样子:
public class Transaction : RealmObject
{
[PrimaryKey]
public string ID { get; set; } = Guid.NewGuid().ToString();
...
public IList<TransactionDetails> Rows { get; }
}
这是 child :
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一点帮助也没有。
最佳答案
你只需要写一次。
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();
}
我使用 Realm 和 Xamarin Forms 编写了一个应用程序。代码在 GitHub 上发布,https://github.com/rsatter/PRO-PD/tree/master/PRO-PD .
关于c# - 将嵌套对象保存到 .Net 中的 Realm 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47944439/