hi, i have a question about how to get tree object working with NHibernate.
i don't want to have parent or parentId property on my object since i have 
no need of it in my business layer and so this is my object:

    public class Tag
    {
        public int Id { get; set; }
        public int Description { get; set; }
        private IList<Tag> childTag = new List<Tag>();
        public virtual IEnumerable<Tag> ChildTag
        { get { return childTag.ToArray(); } }

        public virtual void Add(Tag child)
        { childTag .Add(child); }

        public virtual bool Remove(Tag child)
        { return childTag .Remove(child); }
    }
with this map:

    public TagMap()
        {
            Id(x => x.Id)
                .Column("Kint_T01_IdTag")
                .GeneratedBy.Assigned();
            HasMany(x => x.ChildTag)
                    .KeyColumn("ParentId")
                    .Cascade.All()
                    .Access.CamelCaseField().ReadOnly();
        }

(i try also adding .Not.Inverse() but nothing change)

when i run this test
           
 Tag Tag= fixture.Build<Tag>().Do(x => x.Add(fixture.Create<Tag>())).Create
();
            Tag TagActual;

            using (IUnitOfWork uow = new UnitOfWork())
            {
                uow.openConnection();
                uow.TagRepository.Create(Tag);
                uow.commit();
                Tag.Rmove(Tag.ChildTag.First());
                uow.TagRepository.Update(Tag);
                uow.commit();
                uow.closeConnection();

                uow.openConnection();
                TagActual = uow.TagRepository.GetById(Tag.Id);
                TagActual.ShouldBeEquivalentTo(Tag);
                uow.closeConnection();
            }

it fails because TagActual.ChildTag contains a child even if i remove it 
from parent collection.

debugging the test i see that after 

    uow.TagRepository.Create(Tag);
    uow.commit();

two record are inserted in table and `parent` property of children is set 
correctly

`Tag.Rmove(Tag.ChildTag.First()); ` work correctly and after that the 
collection is empty

but after 

    uow.TagRepository.Update(Tag);
    uow.commit();

nothing change in table and 'parent' filed is still set.

In this way the test failed because TagActual has a collection of children 
while this should be empty

Why NHibernate correctly manage the `add` operation but not the `remove`

Is there a way to do it without adding `Parent` property to my object and 
manually manage it?

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to