Как к объединяющей таблице в быстром nhibernate

Проверка Сервисная медицинская Панель инструментов AWS получит Вас хорошая идея любых текущих или прошлых проблем. Мой опыт состоит в том, что время работы AWS лучше, чем большинство "традиционных" опций хостинга (даже полноценная избыточная установка RackSpace...).

Однако просто движение с AWS в течение времени работы похоже на получение автомобиля для цепочки для ключей (хорошо, почти..;)). С архитектурой, использующей AWS, большое преимущество масштабируется (без оплачиваемых авансом затрат).

21
задан Guillermo Gutiérrez 9 July 2013 в 22:18
поделиться

2 ответа

То, что сказал Пако, неверно. Это можно сделать в Fluent NHibernate. Я сам довольно долго искал в Интернете, не нашел никого, кто говорил бы об этой опции, поэтому я просто немного поигрался с FNHibernate и, наконец, смог это сделать.

Это был мой сценарий:

У меня есть две таблицы -

"FormFields" => Columns { "FieldId", "FieldName", "FieldType", "DisplayOrder" }
"FormStructure" => Columns { "FormId", "FormType", "FieldId" }

Это были мои сущности:

public class FormStructure
{
    public virtual Int32 FormId { get; private set; }
    public virtual Int32 FormType { get; set; }
    public virtual FormField FieldId { get; set; }
}

public class FormField
{
    public virtual int FieldId { get; private set; }
    public virtual String FieldName { get; set; }
    public virtual int? FieldType { get; set; }
    public virtual int? DisplayOrder { get; set; }
}

У меня есть несколько методов в моем запросе, которые возвращают список объектов FormStructure . Я хотел, чтобы эти методы давали мне их, упорядоченные по полю DisplayOrder в объекте FormField , и хотел, чтобы DisplayOrder был доступен как свойство в моей FormStructure возражают и по другим причинам.

По сути, это означает, что мне нужно было объединить таблицы, чтобы получить все столбцы из таблицы FormStructure вместе со столбцом DisplayOrder из таблицы FormField , соединяя их на соответствующие столбцы FieldId .

Что я сделал для решения этой проблемы:

  1. Я добавил свойство DisplayOrder к моему объекту FormStructure .

     публичный виртуальный интервал? DisplayOrder {получить; установленный; }
    
  2. Я добавил метод Join в свой класс сопоставления FormStructure , чтобы он выглядел так.

     открытый класс FormStructureMap: ClassMap 
    {
    общедоступная FormStructureMap ()
     {
    Таблица («ФормаСтруктура»);
    
    Id (x => x.Id);
    Карта (x => x.FormType);
    Ссылки (x => x.Schedule) .Column ("ScheduleId");
    Ссылки (x => x.Field) .Column ("FieldId");
    Карта (x => x.IsMandatory) .Nullable ();
    
    Присоединиться ("FormFields", m =>
     {
    m.Fetch.Join ();
    м.KeyColumn ("FieldId");
    m.Map (t => t.DisplayOrder) .Nullable ();
     });
     }
    }
    

Метод Join , очевидно, будет объединять две таблицы в столбце, который вы определили в методе KeyColumn внутри Join.

Это также приведет к удалению некоторых строк с нулевыми значениями. Чтобы избежать этого (я столкнулся с этим недавно), вы можете добавить m.Optional (); внутри метода Join .

Теперь я мог получить список объектов FormStructure , упорядочить их по DisplayOrder и даже иметь DisplayOrder , доступный как свойство в FormStructure объект.

return session.CreateCriteria<FormStructure>()
              .Add(Expression.Eq("FieldName", fieldName))
              .AddOrder(Order.Asc("DisplayOrder"))
              .List<FormStructure>();

Этого нельзя было сделать раньше, потому что он не распознал бы столбец DisplayOrder в предложении Order, которое у меня там есть.

25
ответ дан 29 November 2019 в 21:41
поделиться

Насколько мне известно, это не поддерживается в Fluent NHibernate, как и многие другие сопоставления, относящиеся к устаревшим базам данных. Боюсь, вам придется вернуться к hbm.xml или смешать сопоставления с hbm.xml

0
ответ дан 29 November 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: