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

标签 c# .net realm

我是 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/

相关文章:

c# - C#中什么情况下不为公共(public)属性生成私有(private)变量?

c# - 从 WP8 后台代理引用 WCF 服务

c# - 在 if 语句中检查当前页面的 url

c# - 是否可以使用委托(delegate)函数从非托管代码中引发 .Net 异常?

.net - 将 JSON 字符串反序列化为 VB.net 对象

c# - WCF session 管理

realm - 如何使用 Realm 浏览器连接到远程 Realm 服务器

C# PostMessage 语法,试图将 WM_CHAR 发布到另一个应用程序窗口

objective-c - 使用Realm数据填充UITableView(表格)?

java - 按字符串数组字段过滤 Realm 结果