Что у меня есть это:удаленный объект будет повторно сохранен каскадом
- Domain.List имеет много ListToListMemberships называемых «подсписков»
- Domain.List также многие ListToListMemberships называемые «ParentLists»
- ListToListMembership имеет один Список (родительский).
- 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;
}
Спасибо. Причина, по которой у меня есть класс членства, заключается в том, что Domain.List будет иметь определенные значения свойств в зависимости от Domain.List, который является членом, когда он отображается. Проблема, безусловно, является каскадной, и причина в том, что если родитель или ребенок удаляются, я знаю, что им больше нужно их членство. –