Предположим, у меня есть следующие таблицы:
Company Person Address
----------------------------------------------------------------------------
Id (PK) Id (PK) Id (PK)
Name CompanyId (FK) CompanyId (FK)
AccessType AddressType
Соответствует следующим классам C # .NET:
class Company
{
int Id;
List<Person> Employees;
List<Address> Addresses;
}
class Person
{
int Id;
List<Address> CompanyAddresses;
}
class Address
{
int Id;
// ...
}
Совершенно легко сопоставить коллекции Person + Address в компаниикласс с использованием NHibernate:
<class name="Company" table="Company">
<id name="Id" column="Id" />
<set name="Employees" table="Person">
<key column="CompanyId" />
<one-to-many class="Person" />
</set>
<set name="Addresses" table="Address">
<key column="CompanyId" />
<one-to-many class="Address" />
</set>
</class>
<class name="Person" table="Person">
<id name="Id" column="Id" />
</class>
<class name="Address" table="Address">
<id name="Id" column="Id" />
</class>
Моя проблема в том, как мне сопоставить адреса и с классом Person?Идея состоит в том, что у компаний есть список лиц (сотрудников) и адресов (сайтов), но адреса компании также можно найти у сотрудников компании.(Я знаю, что это немного странно и неортодоксально, но просто подыграйте мне в этом)1014 * ... но объект Person (.NET) НЕ реализует свойство CompanyId для объявления property-ref
для хранения воды (и мы предпочитаем, чтобы этого не было).
Как сохранить коллекциюадресов в объекте Person через NHibernate, где Person :: CompanyId = Address :: CompanyId?
Спасибо, ребята.:)
РЕДАКТИРОВАТЬ
На самом деле просто делать карту Person.Company.Addresses
, как предложил Диего ниже, но, к сожалению, это не сработаетпоскольку у Компании будет список адресов, у каждого лица, связанного с компанией, будет только подмножество этих адресов.
Я обновил схему таблицы выше.Думайте об этом так, как будто у Person есть AccessType = ENGINEER, тогда в нем будут сохраняться только адреса AddressType = ENGINEERING (в дополнение к CompanyId = CompanyId).