NHibernate: отображение нескольких классов из одной строки таблицы - PullRequest
1 голос
/ 06 апреля 2010

Я не смог найти ответ на этот конкретный вопрос. Я пытаюсь сохранить объектно-ориентированную модель моей предметной области и повторно использовать объекты, где это возможно. У меня возникла проблема, определяющая, как обеспечить сопоставление нескольким классам из одной строки. Позвольте мне объяснить на примере:

У меня есть одна таблица, назовите ее Customer. У клиента есть несколько атрибутов; но для краткости предположим, что у него есть Id, Name, Address, City, State, ZipCode.

Я хотел бы создать класс Customer и Address, который будет выглядеть так:

public class Customer {
    public virtual long Id {get;set;}
    public virtual string Name {get;set;}
    public virtual Address Address {get;set;}
}

public class Address {
    public virtual string Address {get;set;}
    public virtual string City {get;set;}
    public virtual string State {get;set;}
    public virtual string ZipCode {get;set;}
}

У меня возникли проблемы с определением того, каким будет сопоставление для класса Address в классе Customer. Нет таблицы адресов и нет «набора» адресов, связанных с клиентом. Я просто хочу более объектно-ориентированное представление таблицы Customer в коде. Есть несколько других таблиц, в которых есть информация об адресе, и было бы неплохо иметь повторно используемый класс Address для работы с ними. Адреса не разделяются, поэтому разбивать все адреса на отдельные таблицы с внешними ключами кажется излишним и, на самом деле, более болезненным, поскольку мне понадобятся внешние ключи для нескольких таблиц.

Может ли кто-нибудь просветить меня в этом типе картирования? Пожалуйста, приведите пример, если можете.

Спасибо за любые идеи!

-Mike

1 Ответ

9 голосов
/ 06 апреля 2010

Вы должны использовать Компонент в вашем файле отображения NHibernate. Например:

<class name="Customer"
table="Customer">

<id name="Id">
    <generator class="identity"/>
</id>
<property name="Name" />
<component name="Address">
    <property name="Address"/>
    <property name="City"/>
    <property name="State"/>
    <property name="ZipCode"/>
</component>
</class>

Подробнее об этом можно прочитать в блоге Айенде .

...