Наследование таблиц в виде отношения один-к-одному с NHibernate - PullRequest
0 голосов
/ 25 февраля 2010

У меня есть база данных, которая имеет отношение один к одному, смоделированное между человеком и адресом (который использует идентификатор человека). Однако я не могу найти способ сделать карту, используя NHibernate.

Моя структура таблицы следующая:

PersonTable

PersonId
PersonName
PersonAge

AddressTable

PersonId
CountryName
StreetName
StateName

И я бы хотел, чтобы в последнем классе было что-то вроде этого:

PersonClass

int Id
string Name
int Age
Address HomeAddress

AddressClass

string Street
string Country
string State
Person Owner

Я пытался установить связь HasOne, но я не смог повторно использовать PersonId в качестве идентификатора адреса.

Спасибо!

Редактировать: Я забыл упомянуть, что я использую FluentNHibernate, поэтому и беглое отображение, и XML будут в порядке.

Ответы [ 3 ]

0 голосов
/ 25 февраля 2010

Я сделал это, используя Id (). GeneratedBy.Foreign () в карте классов адресов, ссылаясь на идентификатор человека, и это сработало.

Спасибо!

0 голосов
/ 25 февраля 2010

Я бы отобразил это как компонент Person. В лицо ClassMap добавить следующее:

 Component(x => x.Address, m =>
        {
            m.Map(x => x.Street, "Street");
            m.Map(x => x.State, "State");
            // more here
        });

Приветствия

0 голосов
/ 25 февраля 2010

Проблема заключается в том, что ваша схема базы данных не представляет отношения "Имеет один" между человеком и адресом. Он представляет отношения «Имеет много»; Возможно, вы искусственно ограничиваете его одним адресом на человека, но это не меняет того факта, что в модели используется несколько адресов на человека.

Чтобы получить отношение «Есть один», вы должны поместить AddressID в PersonTable.

...