2008-09-28 4 views
3

私は典型的な親/子供の関係を持っています。 .NETにニュースを書き、子どもを追加すると、うまく動作します。NHibernateはうまく再生し、正しい関係を追加します。NHibernate + JSON/Ajaxの親子関係なぜこれは動作していないのですか?

しかし、JSON objectをクライアントからJSONを.NET表現にシリアル化するいくつかのメソッドに渡すと、NHibernateは混乱するようです。親を追加する正しいクエリが出てきますが(IDに新しいguidを割り当てます)、実行しようとしている `SQL内の子オブジェクトにその親IDを関連付けません。私は、以下に挙げる素早く汚れたハックを思いついた - しかし、私は不思議に思っていました、私がここで欠けているものがありますか?そのように行う

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で子の親プロパティを送り返すわけではないおそらくので。私は、それが可能であるかどうかは、2つの循環的性質のために、確かではない。子供には親がいる(jsonには親を持つ元の子供である子供がいるなど)...アイデアはありますか?

答えて

1

HibernateでsaveOrUpdateする前に、すべてのオブジェクトの子が同じメモリオブジェクトの親を持つことを確認する必要があります。マッピングを見直し、データベースのすべての行が唯一のメモリオブジェクトであると思って、それが本当であることを確かめ、ParentObjectsをこれに合わせてリセットします。

また、より柔軟なマージメソッドを試すこともできます。

関連する問題