私が持っているのはこれです:
- Domain.List には、「SubLists」と呼ばれる多くの ListToListMemberships があります。
- Domain.List には、「ParentLists」と呼ばれる多くの ListToListMemberships もあります。
- ListToListMembership には 1 つのリスト (親) があります。
- ListToListMembership には別のリスト (メンバー) があります。
これを考えると、次のテストに合格する必要があります。
[Test]
public void WhenDeletingChildMembershipShouldBeDeletedButNotParent()
{
var list = new Domain.List();
var child = new Domain.List();
var membership = new ListToListMembership()
{
Member = child,
};
list.SubLists.Add(membership);
Session.Save(list);
Session.Flush();
Session.Evict(list);
Session.Evict(child);
var childFromDb = Session.Linq<Domain.List>()
.FirstOrDefault(l => l.ID == child.ID);
Assert.IsNotNull(childFromDb, "child wasn't saved when the parent was saved");
Assert.AreNotSame(child, childFromDb, "child was pulled from cache not the db");
//This will allow it to pass, but I don't want to have to do this.
// foreach (var m in childFromDb.ParentLists)
// {
// m.List.SubLists.Remove(m);
// Session.Save(m.List);
// }
Session.Delete(childFromDb);
Session.Flush();
Session.Evict(childFromDb);
var membershipFromDb = Session.Linq<ListToListMembership>()
.FirstOrDefault(m => m.ID == membership.ID);
Assert.IsNull(membershipFromDb, "membership wasn't deleted");
var parentFromDb = Session.Linq<Domain.List>()
.FirstOrDefault(l => l.ID == list.ID);
Assert.IsNotNull(parentFromDb, "parent list was deleted");
}
基本的に、リストを作成し、それにメンバーを含むリスト メンバーシップを追加すると、メンバーシップとメンバーが自動的に作成されます。
また、親リストまたはメンバー リストのいずれかを削除する場合、メンバー リスト (親が削除された場合) も親リスト (メンバー リストが削除された場合) も削除せずに、メンバーシップを削除したいと考えています。
Domain.List:
<!-- Other relevant fields -->
[HasMany(typeof(ListToListMembership),ColumnKey="ListId",
Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)]
public IList<ListToListMembership> SubLists{
get;
set;
}
[HasMany(typeof(ListToListMembership),ColumnKey="MemberId",
Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)]
public IList<ListToListMembership> ParentLists {
get;
set;
}
ListToListMembership:
<!-- other relevant fields -->
[BelongsTo("ListId",Cascade=CascadeEnum.SaveUpdate)]
public List List {
get;
set;
}
[BelongsTo("MemberId", Cascade = CascadeEnum.SaveUpdate)]
public List Member {
get;
set;
}