when inverse is set to true, and you add the element to the entity, you
gotta set its many-to-one relationship property, meanning, you gotta have a
method called AddElement(Element elem)
that does this:

this.Elements.Add(elem);
elem.Entity = this // this is the back reference

didn't get into the test2 and test3, but using the ICollection Elemenets to
add elements from outside the Entity class is usually a bad idea.


On Sat, Aug 28, 2010 at 2:57 PM, Jacob Madsen <[email protected]> wrote:

> Hi there,
>
> I have written 3 tests to show my issue.
>
> Test 1 is failing and I would like to hear if its possible to get this
> working like in Test 3. Test 2 is also failing, but this is expected.
>
> I have the following object model. "Entity" is an aggregate root so
> "Element" will not be updated/saved/deleted directly (I know according to
> aggregate root pattern that its wrong invoke entity.Elements.Clear()
> directly as I do below - its an object model with the purpose of simplicity
> in this scenario).
>
> public class Entity
> {
>     public int Id { get; set; }
>
>     IList<Element> Elements { get; set; }
>
>     public Entity()
>     {
>         Elements = new List<Element>();
>     }
> }
>
> public class Element
> {
>     public int Id { get; set; }
> }
>
> Test 1:
>
> -------------------------------------------------------------------------------------------------------------------
> The following test is performed when cascade="all-delete-orphan"
> inverse="true" is set for the bag.
>
> int entityId = 0;
>
> using (var session = sessionFactory.OpenSession())
> using (var tx = session.BeingTransaction())
> {
>     var entity = new Entity();
>     entity.Elements.Add(new Element());
>
>     entityId = (int)session.Save(entity);
>
>     tx.Commit();
> }
>
> using (var session = sessionFactory.OpenSession())
> using (var tx = session.BeingTransaction())
> {
>     var entity = session.Get<Entity>(entityId);
>
>     Assert.That(entity.Elements.Count, Is.EqualTo(1)); // Fail, the count
> is equal to 0!!! I can see in the Element row data that the FK is NULL.
> }
>
> Test 2:
>
> -------------------------------------------------------------------------------------------------------------------
> The following test is performed when cascade="all-delete-orphan"
> inverse="false" is set for the bag.
>
> int entityId = 0;
>
> using (var session = sessionFactory.OpenSession())
> using (var tx = session.BeingTransaction())
> {
>     var entity = new Entity();
>     entity.Elements.Add(new Element());
>
>     entityId = (int)session.Save(entity);
>
>     tx.Commit();
> }
>
> using (var session = sessionFactory.OpenSession())
> using (var tx = session.BeingTransaction())
> {
>     var entity = session.Get<Entity>(entityId);
>
>     Assert.That(entity.Elements.Count, Is.EqualTo(1)); // Success
>
>     entity.Elements.Clear();
>
>     tx.Commit(); //
> Exception: NHibernate.ObjectDeletedException : deleted object would be 
> re-saved by cascade (remove deleted object from associations)
> }
>
> Test 3:
>
> -------------------------------------------------------------------------------------------------------------------
> The following test is performed when cascade="all-delete-orphan"
> inverse="true" is set for the bag.
>
> int entityId = 0;
>
> using (var session = sessionFactory.OpenSession())
> using (var tx = session.BeingTransaction())
> {
>     var entity = new Entity();
>
>     entityId = (int)session.Save(entity);
>
>     tx.Commit();
> }
>
> using (var session = sessionFactory.OpenSession())
> using (var tx = session.BeingTransaction())
> {
>     var entity = session.Get<Entity>(entityId);
>
>     entity.Elements.Add(new Element());
>
>     session.Update(entity);
>
>     tx.Commit();
> }
>
> using (var session = sessionFactory.OpenSession())
> using (var tx = session.BeingTransaction())
> {
>     var entity = session.Get<Entity>(entityId);
>
>     Assert.That(entity.Elements.Count, Is.EqualTo(1)); // Success
> }
>
>  --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to