そのため、n-hibernate と流暢な n-hibernate を初めて使用するので、子オブジェクトへのマッピングとカスケード変更に混乱しています。
複数のコレクションを持つオブジェクトがあります。新しいオブジェクトを作成すると、子オブジェクトが作成され、それぞれのテーブルに挿入されます。それはすべて大丈夫です。ただし、サーフェス上の子オブジェクトの変更で親を更新すると、思いどおりに流れているように見えます。キッカーは、データベースを調べると、子オブジェクトのレコードを更新する代わりに、新しいレコードを挿入し、単に更新するのではなく、元のレコードから親オブジェクトへの関連付けを削除していることがわかります。
追加の説明を追加するために、AutoMapping と MappingOverrides を使用しています。ここで、私が作業しているコードを簡単に見てみましょう。
public class ParentObjectOverride : IAutoMappingOverride<ParentObject>
{
public void Override(AutoMapping<ParentObject> mapping)
{
mapping.HasMany(x => x.Chid1).Cascade.SaveUpdate().Table("chid1Table");
mapping.HasMany(x => x.Child2).Cascade.SaveUpdate().Table("child2Table");
}
}
public class Child1Override : IAutoMappingOverride<Child1>
{
public void Override(AutoMapping<Child1> mapping)
{
mapping.References(x => x.ParentObject).Cascade.All();
}
}
public class Child2Override : IAutoMappingOverride<Child2>
{
public void Override(AutoMapping<Child2> mapping)
{
mapping.References(x => x.ParentObject).Cascade.All();
}
}
子オブジェクトが ParentObject から独立して保存されるケースは実際にはありません。cascade.all() と cascade.saveupdate() の両方を試しましたが、どちらも同じ結果になります。
AllDeleteOrphan の使用に関するいくつかの投稿を読みましたが、新しい行を作成して古い行を削除するのではなく、子行を更新するべきではない理由がわかりません。マッピングの概念を理解していないだけかもしれません。
どんな援助でも大歓迎です