Карта NHibernate по коду - многие ко многим - двухсторонняя навигация - PullRequest
1 голос
/ 22 марта 2012

Я довольно новичок в NHibernate.

Я работаю со многими сопоставлениями.они выглядят так:

public abstract class EntityMapping<T> : ClassMapping<T> where T : Entity
{
    public EntityMapping()
    {
        Id(x => x.Id, map => map.Generator(new IdentityGeneratorDef()));
    }
}

    public class PersonMapping : EntityMapping<Person>
    {
        public PersonMapping()
        {
            Property(x => x.Name);
        }
    }

     public class ParentMapping : JoinedSubclassMapping<Parent>
        {
            public ParentMapping()
            {
                Property(x => x.ParentOf);
                Key(x => x.Column("ParentId"));

                Bag(x => x.Children, map =>
                                         {
                                             map.Cascade(Cascade.All);
                                             map.Table("ParentChildren");
                                             map.Key(x => x.Column("ParentId"));
                                         },
                                         r => r.ManyToMany(rm => rm.Column("ChildId")));
            }
        }

        public class ChildMapping : JoinedSubclassMapping<Child>
        {
            public ChildMapping()
            {
                Property(x => x.Toys);
                Key(x => x.Column("ChildId"));

                Bag(x => x.Parents, map =>
                {
                    map.Cascade(Cascade.All);
                    map.Table("ParentChildren");
                    map.Inverse(true);
                    map.Key(x => x.Column("ChildId"));
                },
                r=>r.ManyToMany(rm => rm.Column("ParentId")));
            }
        }

Когда я делаю

var parent = session.Get<Parent>(1);
parent.Children.First(); // Works

, я могу получить доступ к добавленным детям.Однако, когда я пытаюсь вернуться назад, то есть:

var child = session.Get<Child>(2);
child.Parents.First(); // Doesn't work.

Родительская коллекция пуста на дочернем объекте.

Может ли кто-нибудь пролить свет на эту проблему?

Приветствия,

Джеймс

РЕДАКТИРОВАТЬ

Извините, я использую следующий код, чтобы сохранить и получить мойлица:

using(var session = _sessionFactory.OpenSession())
{
   using(var transaction = session.BeginTransaction())
   {
      var person = new Parent(){Name = "James", ParentOf = 1};
      var child = new Child(){ Name="James Jr." Toys = 20 };

      person.Children.Add(child);

      session.Save(person);
      transaction.Commit();
   }
}

Для извлечения данных:

using(var session = _sessionFactory.OpenSession())
{
   using(var transaction = session.BeginTransaction())
   {
      var james = session.Get<Parent>(1);
      var child = session.Get<Child>(2);        

      transaction.Commit();
   }
}

Нужно ли заключать транзакции в транзакции?

Приветствия,

Джеймс

1 Ответ

0 голосов
/ 26 марта 2012

Извините, что я был идиотом,

Я просто снова написал тот же код и заметил, что у меня есть get, в той же транзакции, что и коммиты (после session.save и перед транзакции)

Спасибо за помощь!

...