【问题标题】:Saving Nested Objects to Realm Database in .Net在 .Net 中将嵌套对象保存到领域数据库
【发布时间】:2017-12-22 16:17:10
【问题描述】:

我是领域的新手,在保存嵌套对象时遇到了很多麻烦。我可以拯救父母,但我得到一个Realms.Exceptions.RealmObjectManagedByAnotherRealmExceptionCannot start to manage an object with a realm when it's already managed by another realm。我只有一个领域,我正在创建一个新对象!

这是父类的样子:

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 一点帮助都没有。

【问题讨论】:

  • 在高层次上,没有理由不这样做。我想这是您未提供的代码中的某些内容导致了问题。例如,TransactionDetails 类上有一个 Account 引用,可能还有其他相关对象。 SO 不太适合回答这些问题,所以我建议你在 Github (github.com/realm/realm-dotnet/issues) 上打开一个问题,最好提供一个重现项目,以便我们进行调查。
  • 好的,谢谢尼古拉。

标签: c# .net realm


【解决方案1】:

你只需要写一次。

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

【讨论】:

  • 谢谢@Rabi,我会检查应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 2021-09-10
  • 1970-01-01
相关资源
最近更新 更多