Rambler's Top100
Как сделать в NHibernate?
  Rambler's Top100
Как сделать ленивую загрузку связей
1
   Следующий метод показывает как делать принудительную загрузку ленивой связи:
        public Project getProject(int  id)
        {
            ISessionFactory factory = getCfg().BuildSessionFactory();
            ISession session = factory.OpenSession();
            Project p = (Project)session.CreateCriteria(typeof(Project))
				.Add(Expression.Eq("Id", id)).UniqueResult();

	    //принудительная загрузка ленивых связей
            if (!NHibernateUtil.IsInitialized(p.Participants))
            {
             NHibernateUtil.Initialize(p.Participants);
            }

            session.Close();
            return p;
        }


   Если же не делать принудительную загрузку связей, то для загрузки связей, когда это необходимо, можно использовать следующий метод:
        public void LoadParticipants(Project p)
        {
            ISessionFactory factory = getCfg().BuildSessionFactory();
            ISession session = factory.OpenSession();
            session.Lock(p, LockMode.None);
            if (!NHibernateUtil.IsInitialized(p.Participants))
            {
                NHibernateUtil.Initialize(part.Participants);
            }
            session.Close();
        }


   Следует заметить, что без вызова метода LoadParticipants() при попытке обратиться к "ленивой" связи p.Participants(которая еще не загружена) будет брошено исключение no session.
1


ERP системы с открытыми кодами

OpenSource