Я бы не стал тратить свое время, пытаясь понять, как согнуть 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>