1

Я новичок в .NET MVC. Однако эта «проблема», которую я застрял, выглядит довольно обычным я не могу найти ни одного учебника или потока stackoverflow, который объясняет, как это сделать правильно.Класс отображения NHibernate с атрибутом того же типа

У меня есть класс, MyClass, который имеет два атрибута одного типа

public class MyClass : IEquatable<MyClass> 
{ 
    public virtual MyClass LeftChild { get; set; } 
    public virtual MyClass RightChild { get; set; } 
    ... 
} 

Теперь у меня есть проблема с NHibernate отображения. Сначала я пробовал сопоставление «один к одному». Я создал новый экземпляр и НЕ устанавливал Childs, сохранял его (допустим, Id = 1) и передал этот экземпляр View, и я ожидал, что RightChild будет NULL, а LeftChild будет NULL. Но в режиме debbug я вижу, что RightChild был установлен в MyClass с Id = 1 (как и экземпляр MyClass, установленным для этого атрибута), а также с LeftChild.

Mapping MyClass.hbm.xml

...  
<one-to-one name="LeftChild" class="MyClass"/> 
<one-to-one name="RightChild" class="MyClass"/> 
... 

ли это правильный подход, чтобы сделать это с одним-на-один или я должен использовать что-то другое?

ответ

1

Ссылки, в которых наша таблица содержит внешние ключи, почти всегда лучше всего сопоставлять с many-to-one.

Просто думать об этом в качестве стандартной ссылки на другие инстанции (Страна, валюты) ... которая случайно из одного и того же типа.

<many-to-one name="LeftChild" column="LeftChild_ID" class="MyClass"/> 
<many-to-one name="RightChild" column="RightChild_ID" class="MyClass"/> 

Единственная проблема, я вижу, чтобы быть уверенным, что часть сервера (C# код, приложение) будет правильно установки этих значений. В этом виде сохраняемой информации нет двунаправленного отображения. Каждому родному брату нужна своя информация, кто прав, кто остался.

Я имею в виду, сравнивая с похожим сопоставлением: parent-child (также тот же тип). В этом случае у нас будет ребенок, имеющий ссылку на родителя, а у родителя - сбор детей.

Но это не то же самое здесь .. снова .. мы сопоставляем только одну сторону отношения.

one-to-one здесь не подходит, потому что он требует два таблиц, с (почти) таким же количеством строк, разделяя тот же столбец как ключ ... Я хотел бы использовать его, но для вида Дополнительной информации ... см: