После нескольких дней поиска и пробных действий мне нужно задать вопрос, потому что у меня нет выбора.Сценарий прост: рекурсивное дерево категорий.Дерево извлекается из одной таблицы и должно быть связано с комбинированным списком в приложении Winforms.
Сопоставление в NHibernate не является проблемой;дерево правильно отображается.Также работает привязка к выпадающему списку.Проблема в том, что когда я хочу сохранить категорию, я получаю индекс параметра из-за ошибки диапазона, и это понятно, потому что, как вы можете видеть из приведенных ниже списков, NH использует и свойство, и внешний ключ в множественномодно отображение для обновления базы данных, и они оба ссылаются на один и тот же столбец.
Проблема в том, что мне нужно свойство ParentGroupId для привязки данных в комбинированном ящике, а также мне нужен внешний ключ во многихсопоставление один к одному.Кто-нибудь сталкивался с подобной ситуацией?Я думаю, что попробовал почти любой возможный сценарий, но пока не повезло .....
Класс:
public class ProductGroup : EntityBindable
{
public virtual string GroupName { get; set; }
public virtual ProductGroup _parentGroup { get; set; }
public virtual IList<ProductGroup> _subGroups { get; set; }
public virtual int ParentGroupId { get; set; }
}
Отображение:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Brickx.Model" namespace="Brickx.Model">
<class name="ProductGroup">
<id name="Id" type="int" unsaved-value="0">
<generator class="hilo">
</generator>
</id>
<property name="GroupName" type="string" length="50" />
<property name="ParentGroupId" type="Int32" />
<many-to-one name="ParentGroup"
column="ParentGroupId"
class="ProductGroup" />
<bag name="SubGroups" cascade="all, delete-orphan">
<key column="ParentGroupId" />
<one-to-many class="ProductGroup" />
</bag>
</class>
</hibernate-mapping>