gpt4 book ai didi

c# - 将嵌套对象保存到 .Net 中的 Realm 数据库

转载 作者:太空宇宙 更新时间:2023-11-03 12:19:49 24 4
gpt4 key购买 nike

我是 Realm 新手,在保存嵌套对象时遇到了很多麻烦。我可以保存父级,但我得到一个 Realms.Exceptions.RealmObjectManagedByAnotherRealmExceptionCannot 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com