2008-09-28 56 views
3

我有一個典型的父母/子女的關係。在.NET寫新聞並添加小孩工作正常,NHibernate發揮不錯,並增加了正確的關係。NHibernate + JSON/Ajax父/子關係?爲什麼這不起作用?

但是,當從客戶端傳遞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發回孩子的父母財產。由於二者的循環性質,我甚至不確定這是否可能。孩子有一個父母(在json有一個孩子,是有父母的原始孩子等)......任何想法?

回答

1

在使用Hibernate執行saveOrUpdate之前,必須確保所有的對象子對象都具有相同的內存對象父對象。查看映射,並認爲數據庫上的每一行都是唯一的一個內存對象,請確保這是真的,並重置ParentObjects以適應此情況。

此外,您可以嘗試使用更靈活的合併方法。