У меня есть отношение родительского дочернего элемента nHibernate. Родительский класс в настоящее время вытаскивает дочерние элементы в список, но я хочу поместить их в SortedList на основе столбца упорядочения в таблице. Как изменить файл сопоставления NHibernate, чтобы система узнала, в каком столбце я заказываю?Как сопоставить сортировку в NHibernate
текущие файлы сопоставления NHibernate являются:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Model.Configuration.Pages"
assembly="Model.Configuration">
<joined-subclass
table="PageConfigurations"
name="PageConfiguration"
extends="Model.Configuration.Configuration.TargetedConfiguration"
lazy="false">
<key column="TargetedConfigurationId" />
<property name="SchemaVersion" />
<property name="Template" type="System.String" length="50" />
<property name="PageKey" type="System.String" length="50" />
<property name="Percentage" />
<bag name="Controls" cascade="all-delete-orphan" lazy="false" >
<key column="PageConfigurationId" />
<one-to-many class="WidgetConfiguration"/>
</bag>
</joined-subclass>
</hibernate-mapping>
для родительской таблицы и:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Model.Configuration.Pages"
assembly="Model.Configuration">
<class name="WidgetConfiguration" lazy="false" table="PageConfiguration_Widgets" discriminator-value="Default">
<id name="Id" unsaved-value="0" type="int" >
<generator class="identity" />
</id>
<discriminator column="ConfigurationType" />
<property name="Slot" type="System.String" length="100" />
<property name="WidgetTypeName" type="System.String" length="100"/>
<property name="ViewName" type="System.String" length="50" />
<property name="SlotOrder" type="System.Int32" />
</class>
</hibernate-mapping>
для дочерней таблицы.
Что нужно добавить к родительским или дочерним сопоставлениям, чтобы сообщить им, что новый столбец SlotOrder следует использовать в качестве ключевого поля при извлечении WidgetConfiguration в SortedList.
EDIT: Класс, данные считываются в это:
public class PageConfiguration : TargetedConfiguration
{
public PageConfiguration()
{
// replaced by SortedList
//Controls = new List<WidgetConfiguration>();
Controls = new SortedList<int, WidgetConfiguration>();
}
public string PageKey { get; set; }
public string Template { get; set; }
public int? Percentage { get; set; }
// replaced by SortedList
//public IList<WidgetConfiguration> Controls { get; set; }
public IDictionary<int, WidgetConfiguration> Controls { get; set; }
public int SchemaVersion { get; set; }
}
Обратите внимание, что List<WidgetConfiguration>
было изменено на SortedList<int, WidgetConfiguration>
. Как сообщить NHibernate, что, когда новый элемент добавлен в SortedList, что используемое значение ключа должно быть WidgetConfiguration.SlotOrder?
Не пропустил ничего ... спасибо –
Замечательно, что он работает! –