3

我有一个典型的父母/子女关系。写新闻.NET和添加孩子效果很好,NHibernate玩得很好,并增加了正确的关系。

但是,当将 aJSON object从客户端传递给将我的 JSON 序列化为 .NET 表示的某个方法时,NHibernate 似乎会感到困惑。它提出了正确的查询来添加父级(并为 ​​Id 分配一个新的 guid),但是,它不会将该父级 ID 与它尝试执行的 SQL 中的子级对象相关联。我想出了一个快速而肮脏的技巧,我在下面列出 - 但我想知道,这里有什么我遗漏的吗?

IList<BackerEntry> backersTemp = new List<BackerEntry>();
foreach (BackerEntry backerEntry in jsonBackerEntity.BackerEntries)
{
  backersTemp.Add(backerEntry);
}

jsonBackerEntity.BackerEntries.Clear();

foreach (BackerEntry backerEntry in backersTemp)
{
  jsonBackerEntity.AddChild(backerEntry);
}

这样做是我似乎可以让 NHibernate 看到这些孩子真的属于这个父母的唯一方法。在我的 AddChild 方法内部看起来像这样:

public virtual void AddChild(BackerEntry backerEntry)
{
  if (backerEntry.Backer != null)
  {
    backerEntry.Backer.BackerEntries.Remove(backerEntry);
  }
  backerEntry.Backer = this;
  this.BackerEntries.Add(backerEntry);
}

编辑:我想我可能刚刚意识到为什么 - 可能是因为我没有在 JSON 中发回孩子的 Parent 属性。由于两者的循环性质,我什至不确定这是否可能。孩子有父母(在json中有一个孩子,他是有父母的原始孩子,等等)......有什么想法吗?

4

1 回答 1

1

在使用 Hibernate 进行 saveOrUpdate 之前,您必须确保所有对象子对象都具有相同的内存对象父对象。查看映射并认为数据库中的每一行都是一个且只有一个内存对象,确保这对您来说是正确的,然后重置 ParentObjects 以适应它。

此外,您可以尝试使用更灵活的合并方法。

于 2013-11-14T11:09:05.990 回答