NHibernate Mapping - PullRequest
       1

NHibernate Mapping

0 голосов
/ 24 февраля 2011

У меня есть такая схема таблицы

Id
CompanyName
EmailAddress
EmailAddressHash
Phone1
Phone1Hash
Phone2
Phone2Hash

Подобные члены класса

 class HashValue
{
  //properties
  public string OriginalValue;
  public string HashValue;
}

class HashedApplication
{
  //properties
  public HashValue Email;
  /*Phone 1 and 2*/
  public List<HashValue> PhoneNumbers;
  public int Id;
  Public string CompanyName;
}

Мне интересно, как отобразить эту таблицу и классы в NHibernate.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Вы должны отобразить свойство Email класса HashedApplication как компонент . Поэтому было бы также лучше, если бы вы создали тип HashValue в качестве типа значения.

Коллекция PhoneNumbers может быть отображена как набор, который содержит composite-element:

Конечно, это означает, что вам придется изменить модель данных для коллекции PhoneNumbers; вам нужно будет создать еще одну таблицу, содержащую номера телефонов, связанные с конкретным приложением HashedApplciation. (Что лучше, конечно, поскольку ваша модель данных нормализуется).

1 голос
/ 24 февраля 2011

Я бы не стал тратить свое время, пытаясь понять, как согнуть NHibernate для работы с этой плохо спроектированной структурой таблицы, из страха (я мог бы столкнуться с этим решением в будущем), я предоставлю следующее ;-) Если вы можете измените его, а затем нормализуйте базу данных правильно.

Я бы начал с рефакторинга дизайна. Создать

Company Table[Id, CompanyName EmailAddress EmailAddressHash] 

и

ContactDetails[Id, CustomerId, Phone, PhoneHash ] 

Создать отношение «многие к одному». Затем посмотрите на создание карт NHibernate.

Создайте следующие сопоставления.

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="STOE.Bll" assembly="Bll">
  <class name="Company" table="CompanyTable" mutable="false">
     <id name="Id" column="Id" unsaved-value="0">
      <generator class="identity"/>
    </id>
   <property name="Name"  column="CompanyName" />
   <property name="EmailAddress"  column="EmailAddress" />
   <property name="EmailAddressHash"  column="EmailAddressHash" />
   <bag name="CompanyContactDetails" lazy="false" table="ContactDetails" inverse="true" cascade="all">
      <key column="CustomerId" />
      <one-to-many class="STOE.Bll.CompanyContactDetail, Bll" />
    </bag> 
  </class>
</hibernate-mapping>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="STOE.Bll" assembly="Bll">
  <class name="CompanyContactDetail" table="CompanyContactDetail" mutable="false">
     <id name="Id" column="Id" unsaved-value="0">
      <generator class="identity"/>
    </id>
   <property name="Phone"  column="Phone" />
   <property name="PhoneHash"  column="PhoneHash" />

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