我所拥有的是:
- Domain.List 有许多名为“SubLists”的 ListToListMemberships
- Domain.List 也有许多名为“ParentLists”的 ListToListMemberships
- ListToListMembership 有一个 List(父级)。
- ListToListMembership 有另一个 List(成员)。
鉴于此,我希望通过以下测试:
[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");
}
基本上,当我创建一个列表并向其中添加一个成员的列表成员资格时,我希望自动创建成员资格和成员。
另外,当我删除父列表或成员列表时,我希望删除成员资格,但不希望删除成员列表(在删除父列表的情况下)或删除父列表(在删除成员列表的情况下)。
域列表:
<!-- 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;
}
列表到列表成员:
<!-- other relevant fields -->
[BelongsTo("ListId",Cascade=CascadeEnum.SaveUpdate)]
public List List {
get;
set;
}
[BelongsTo("MemberId", Cascade = CascadeEnum.SaveUpdate)]
public List Member {
get;
set;
}