Проверка Сервисная медицинская Панель инструментов AWS получит Вас хорошая идея любых текущих или прошлых проблем. Мой опыт состоит в том, что время работы AWS лучше, чем большинство "традиционных" опций хостинга (даже полноценная избыточная установка RackSpace...).
Однако просто движение с AWS в течение времени работы похоже на получение автомобиля для цепочки для ключей (хорошо, почти..;)). С архитектурой, использующей AWS, большое преимущество масштабируется (без оплачиваемых авансом затрат).
То, что сказал Пако, неверно. Это можно сделать в 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
.
Что я сделал для решения этой проблемы:
Я добавил свойство DisplayOrder к моему объекту FormStructure
.
публичный виртуальный интервал? DisplayOrder {получить; установленный; }
Я добавил метод 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, которое у меня там есть.
Насколько мне известно, это не поддерживается в Fluent NHibernate, как и многие другие сопоставления, относящиеся к устаревшим базам данных. Боюсь, вам придется вернуться к hbm.xml или смешать сопоставления с hbm.xml