Ce que j'est ceci:objet supprimé serait réenregistrés par cascade
- Domain.List a beaucoup ListToListMemberships appelés "sous-listes"
- Domain.List a aussi beaucoup ListToListMemberships appelé "ParentLists"
- ListToListMembership a une liste (le parent).
- ListToListMembership a une autre liste (le membre).
Donné ce que je veux le test suivant pour passer:
[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");
}
Fondamentalement, quand je crée une liste et ajouter une adhésion de liste avec un membre à, je veux les membres et le membre à créer automatiquement. De plus, lorsque je supprime la liste des parents ou la liste des membres, je souhaite supprimer l'adhésion, mais pas la liste des membres (dans le cas du parent supprimé) ni la liste des parents (dans le cas de la liste des membres en cours de suppression).
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;
}
Merci. La raison pour laquelle j'ai la classe d'appartenance est parce qu'une Domain.List aura des valeurs de propriété spécifiques selon le Domain.List c'est un membre de quand il est affiché. Le problème est certainement en cascade et la raison en est que si le parent ou l'enfant est supprimé, je sais que plus besoin de leurs adhésions. –