Rambler's Top100
Как сделать в NHibernate?
  Rambler's Top100
Как сделать ленивую загрузку связей
2
   Когда у сущности много связей - это существенно увеличивает время ее загрузки из базы данных, поэтому в целях уменьшения времени загрузки некоторые связи стоит сделать ленивыми(lazy) - при этом данные(связи) будут подгружаться только при обращении к ним.

   Есть сущности Проект(Project) и Участник(Participant), связанные собой отношением многие-ко-многим (many-to-many). Когда в проекте много участников, его загрузка из БД занимает много времени, поэтому сделаем загрузку "ленивой" (lazy). Далее приведены часть кода класса Project, описывающий связь на уровне C# классов, и часть nhibernate маппинга project.hbm.xml, где описывается эта связка:

using System;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
namespace NHibernateEx
    [Serializable]
    public class Project
    {
.................................................................................
        private ICollection _participants = new List();
        public virtual ICollection Participants
        {
            get { return _participants; }
            set { _participants = value; }
        }
.................................................................................
    }

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="NHibernateEx.Project, NHibernateEx" table="Projects">
........................................................................
    <bag name="Participants" table="ProjectsParticipants" lazy="true">
      <key column="ProjId"/>
      <many-to-many class="NHibernateEx.Participant, NHibernateEx"
        column="PersonId"/>
    </bag>
  </class>
</hibernate-mapping>
2


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

OpenSource