0

構造:TypeAにはTypeBのコレクションがあり、TypeBにはTypeCのコレクションがあります。

TypeBとTypeCは多対多です。

TypeAマップ

HasMany<TypeB>(t => t.TypeBList).CascadeAll().Inverse()..

TypeBマップ

HasManyToMany<TypeC>(t => t.TypeCList).Casecade.All().Inverse()..

TypeCマップ

HasManyToMany<TypeB>(t => t.TypeBList).Casecade.None()...

TypeBには次の方法があります

Add(TypeC typec) { typec.TypeBList.Add(this); TypeBList.Add(typec); }

また、typebコレクションに新しいtypecを追加する必要がありますが、repo.Save(typeA)を呼び出して保存したいのですが、TypeBがTypeAとTypeCの両方に存在するため、共有コレクションの問題が発生します。

var typec = new TypeC { TypeBList = typea.TypeBList, .... }
typea.TypeBList[0].Add(typec);
repo.save(typea);

typeaを保存してもこれは機能しませんか?typebを取得して、そこで変更を加える必要がありますか?

4

1 に答える 1

0

オブジェクトのコレクションは通常、まったく共有されるべきではなく、ほとんどの場合、特にNHibernateを使用している場合は、コレクションインスタンスを変更することさえすべきではありません。内容をよりよくコピーします。

obj1.ListA.Clear();

foreach(var item in obj2.ListA)
    obj1.ListA.Add(Item);

更新:なぜですか?

NHibernateは、コレクションインスタンスを独自のコレクションクラスに置き換えて、遅延読み込みと変更追跡を有効にするためです。

于 2012-06-29T08:25:49.173 に答える