Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6439
Последний выпуск: 19.06.2015

NHibernate: нужна помощь в составлении маппинга либо запроса к БД

62K
27 апреля 2012 года
Cyberatino
24 / / 06.03.2012
Проблема вкратце: при запросе выбора всех записей из таблицы parents получаю дублирующийся набор из таблицы children, в которую помещен FK из parents.
Использую Fluent NHibernate.

БД вида:

 
Код:
TABLE parents
***id
***system_name

TABLE children
***id
***custom_name
***parent_id

FK: parent_id, который назван "FK_parent_id_to_id_in_parents"
Описываю моделью:


Код:
public class Parent
{
   public virtual int Id { get; set; }
   public virtual string SystemName { get; set; }
}

public class Child: Parent
{
   public override int Id
   {
      get
      {
             return base.Id;
       }
      set
      {
             base.Id = value;
      }
   }
   public virtual string CustomName
   {
      get
      {
             return _CustomName != null ? _CustomName : base.SystemName;
      }
     set
     {
            _CustomName = value;
     }
   }

    public virtual Parent ParentId { get; set; }
    private string _CustomName = string.Empty;
}
Маппинг примитивен:


Код:
public class ParentMapper: ClassMap<Parent>
{
    Table("parents");
    Id(x => x.Id).GeneratedBy.Native();
    Map(x => x.SystemName, "system_name").Not.Nullable();
}

public class ChildMapper: ClassMap<Child>
{
    Table("children");
    Id(x => x.Id).GeneratedBy.Native();
    Map(x => x.DisplayName, "display_name");
    References(x => x.ParentId).Column("parent_id").Cascade.None().ForeignKey("FK_parent_id_to_id_in_parents");
}
А мой запрос выглядит так:


 
Код:
//где-то ранее открываем сессию ISession session а потом...
using(ITransaction tr = session.BeginTransaction())
{
    List<Parent> lp = new List<Parent>(session.CreateCriteria(typeof(Parent)).List<Parent>());
    tr.Commit();
}
В итоге в lp получаем "количество записей parents" + "количество записей в children с не пустым FK".
Нужно как-то правильнее создать запрос к базе или отмаппить, чтобы возвращалось нужное число записей, не гонялся лишний трафик и не нагружалась база, естестно =)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог