HasOne vs References Отображение беглого NHibernate - PullRequest
8 голосов
/ 05 марта 2010

Я впервые работаю с FluentNhibernate Mapping и сталкиваюсь с вопросом о том, как ссылаться на другую таблицу. Любая помощь приветствуется:

У меня есть несколько таблиц с именем CD_ varname , и все они содержат два столбца - CODE и DESCR.

У меня есть одна основная таблица , называемая Recipient , и она имеет, скажем, два столбца с именами ALIVE и SEX, оба имеют номер типа и ссылаются на таблицы CD_ALIVE и CD_SEX , Если Alive = 1 в Recipient, то нам нужно получить код и описание из таблицы CD_ALIVE, где Code = 1.

Я описал класс Codef:

public Class Codef
{
    int Code { get; set; }
    string Descr { get; set; }
}

Мой класс получателей присваивает их компоненту. Класс получателя выглядит следующим образом:

 public Class IRecepient
{
    int ID { get; set; }
    Birth Birth {get; set;}
    Death Death { get; set; }
}

Где мои классы рождения и смерти:

public Class Birth
{
    DateTime BDate { get; set; }
    Codef Sex { get; set; }
    Codef Ethnicity { get; set; } //CD_ETHNICITy Table
    Codef Race { get; set; } //CD_RACE Table
}

и мой класс смерти:

public Class Death
{
    DateTime DeathDate { get; set; }
    Codef Alive { get; set; }
}   

Итак, основной столбец «Живой» в Получателе фактически ссылается на мой Recipient.Death.Alive.Code

У меня есть класс отображения codef:

   public CodefMapping()
         {
             Map(x => x.Code, "CODE");
             Map(x => x.Descr, "DESCR");
         }

Я пытаюсь выполнить сопоставление получателей, и именно здесь я застрял. Могу ли я сделать что-то вроде этого:

 HasOne<CodefMapping>(c => c.Death.Alive)
                    .PropertyRef(c => c.Code)
                    .PropertyRef(c => c.Descr)
                    .WithForeignKey("ALIVE");

Не работает: ( Любая помощь очень ценится.

Спасибо.

Ответы [ 2 ]

18 голосов
/ 05 марта 2010

Я думаю, что вы хотите использовать References отображение

HasOne означает, что 2 сущности, которые вы отображаете вместе, имеют «взаимоисключающий» идентификатор

http://jagregory.com/writings/i-think-you-mean-a-many-to-one-sir/

1 голос
/ 05 марта 2010

Ссылки для сопоставления свойств.

public DeathMap()
{
    References( x => x.Alive );        
}

И вам нужен Id для codef.

public CodefMapping()
{
    Id(x => x.Code);
    Map(x => x.Descr);
}

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

...