我有一个典型的父/子关系。在.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有一个孩子,谁是有父母的原始孩子等)...有什么想法吗?
答案 0 :(得分:1)
在使用Hibernate的saveOrUpdate之前,您必须确保所有对象子级都具有相同的内存对象父级。查看映射并认为数据库中的每一行都是一个且只有一个内存对象,请确保对您来说是正确的,并重置ParentObjects以适应这种情况。
此外,您可以尝试使用更灵活的合并方法。