NHibernate + JSON / Ajax父/子关系?为什么这不起作用?

时间:2008-09-28 22:52:41

标签: .net ajax json nhibernate

我有一个典型的父/子关系。在.NET中撰写新闻并添加子项工作正常,NHibernate可以很好地添加正确的关系。

但是,当从客户端传递JSON 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有一个孩子,谁是有父母的原始孩子等)...有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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