NHibernate: взаимно однозначная ассоциация ..? - PullRequest
2 голосов
/ 10 января 2011

Я впервые использую NHibernate, и в настоящее время я пишу сопоставления и реструктурирую объекты в моем приложении, чтобы они более четко отображались.

У меня есть ситуация, которая немного похожа наthis:

class A
{
    // Properties of A
    //..

    // References an instance of B (but can be null)
    public B BInstance { get; set; }
}

class B
{
    // Properties relevant to a particular instance of A
}

Теперь мне кажется, что это взаимно-однозначная ассоциация, но я не могу найти в документации NHibernate никаких ссылок на то, возможна ли на самом деле взаимозависимая взаимно-однозначная связь..

В идеале, «Таблица B» в моей базе данных должна иметь столбец «A_ID».Наличие строки с этим A_ID будет указывать, что связанный экземпляр A находится в ненулевой ассоциации.Если нет строки с этим A_ID, это указывало бы на нулевую связь.

Единственный способ, которым я могу подумать, чтобы отобразить это, - сопоставить коллекцию из A (которую приложение ограничивает 1 или 0 элементами),но мне интересно, есть ли более очевидное решение, которое я упускаю.

Заранее благодарен за вашу помощь.

Чтобы уточнить: Я использую ванильNHibernate, не свободно.

Ответы [ 4 ]

2 голосов
/ 10 января 2011

Вы должны иметь возможность указать References (x => x.BInstance) .Nullable () в ваших сопоставлениях (при условии, что вы используете Fluent nHibernate).

1 голос
/ 14 января 2011

В итоге я изменил модель, чтобы она более точно соответствовала схеме базы данных, которую я пытался достичь.

Я сделал это путем двунаправленной связи один-к-одному в объектной модели. (т.е. класс B также содержит ссылку на связанный с ним класс A).

Это допускало прямое использование ассоциации «один к одному с ограничением =« истина »/>, которая может иметь значение null.

0 голосов
/ 10 января 2011

в отображении A вы должны написать:

<many-to-one class="B" name="BInstance" column="a_ID" not-null="false"/>

и в классе поместите свойство BInstance типа "B". not-null = "false" - это значение по умолчанию, я написал только для обеспечения того, что B может быть нулевым, как вы и просили.

0 голосов
/ 10 января 2011

Обнуляемое взаимно однозначное сопоставление возможно с использованием однозначного элемента.См. http://ayende.com/Blog/archive/2009/04/19/nhibernate-mapping-ltone-to-onegt.aspx для довольно хорошего резюме Ayende.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...