どの要素にも含まれていないルート オブジェクトのリストを追跡したいと考えています。次の疑似コードが機能するようにします。
using (session1 = [...]) {
IList<FavoriteItem>list = session1.Linq<FavoriteItem>().ToList();
}
list.Add(item1);
list.Add(item2);
list.Remove(item3);
list.Remove(item4);
var item5 = list.First(i => i.Name = "Foo");
item5.Name = "Bar";
using (session2 = [...]) {
session2.Save(list);
}
これにより、item1 と item2 が自動的に挿入され、item3 と item3 が削除され、item5 が更新されます (つまり、すべてのアイテムに対して session.SaveOrUpdate() を個別に呼び出したくありません)。
テーブルに関連付けられていない疑似エンティティを定義することはできますか? たとえば、Favorites クラスを定義し、その 2 つのコレクション プロパティをマップして、次のようなコードを書きたいとします。
using (session1 = [...]) {
var favs = session1.Linq<Favorites>();
}
favs.FavoriteColors.Add(new FavoriteColor(...));
favs.FavoriteMovies.Add(new FavoriteMovie(...));
using (session2 = [...]) {
session.SaveOrUpdate(favs);
}
FavoriteColors と FavoriteMovies は、Favorites クラスの唯一のプロパティで、IList と IList 型です。これら 2 つのコレクション プロパティのみを保持し、Favorites クラスは保持したくありません。
実際には、追加と削除を追跡し、親エンティティに属さず、それ自体を表す IPersistentCollection オブジェクトが必要です (エンティティのコレクション プロパティに発生するのと同じことが、親エンティティがない場合のみです)。コレクションがエンティティに属している場合、これは完全に機能し、その場合、2 つのセッション間でアイテムを追加および削除できます。
どんな助けでも大歓迎です。