public void Can_persist_a_cat_hierarchy() { //arrange var grannyCat = new Cat { Name = "Granny", Gender = "F" }; var mommyCat = new Cat { Name = "Mommy", Gender = "F" }; var babyCat = new Cat { Name = "Baby", Gender = "F" }; try { var session = _currentScope.CurrentSession; session.SaveOrUpdate(grannyCat); grannyCat.Kittens.Add(mommyCat); mommyCat.Parent = grannyCat; mommyCat.Kittens.Add(babyCat); babyCat.Parent = mommyCat; _currentScope.Commit(); } finally { _currentScope.End(); } //act try { var session = _currentScope.CurrentSession; babyCat = session.Get <Cat>(babyCat.Id); babyCat.Parent.Parent.Name = "Gramma"; var siblingCat = new Cat { Name = "Sibling", Gender = "F" }; babyCat.Parent.Kittens.Add(siblingCat); siblingCat.Parent = babyCat.Parent; _currentScope.Commit(); } finally { _currentScope.End(); } //assert try { var session = _currentScope.CurrentSession; babyCat = session.Get <Cat>(babyCat.Id); //assert persistence Assert.AreEqual(2, babyCat.Parent.Kittens.Count); Assert.AreEqual("Gramma", babyCat.Parent.Parent.Name); } finally { _currentScope.End(); } }