私は2つのエンティティを持っています:
public class Parent()
{
public ICollection<Child> Children { get; set; }
}
public class Child()
{
public Parent Parent { get; set; }
}
マッピングは次のようになります。
public class ParentMap : ClassMap<Parent>
{
HasMany(x => x.Children).Cascade.All().Inverse();
}
public class ChildMap : ClassMap<Child>
{
References(x => x.Parent).Cascade.None();
}
通常、親または子を保存するには、次のようにする必要があります。
var parent = new Parent();
var child = new Child();
parent.Children.Add(child);
child.Parent = parent;
Session.SaveOrUpdate(parent);
つまり、NHibernate がこのエンティティを正しく保持するには、両方のオブジェクトでプロパティを設定する必要があります。
ただし、レガシーの問題については、両側を設定せずにこのエンティティを保存したいので、次のことができます。
var parent = new Parent();
var child = new Child();
child.Parent = parent;
Session.SaveOrUpdate(child);
この場合、子を親のChildren
コレクションに追加せずParent
、子オブジェクトに を設定するだけです。
Children
データベースから親を取得すると、そのコレクション内に子が含まれるように、NHibernate にこれを正しく保持させる方法はありますか?
PS セッションキャッシュに潜在的な問題があり、NHibernate に依存してバックグラウンド操作を実行してデータモデルを正しくすることを認識していますが、今のところこの問題は無視しています。