Вот домен, который я хочу иметь:
public class Person
{
public int Id { get; set; }
public IList<AcquiredCertificate> AcquiredCertificates { get; set; }
}
public class AcquiredCertificate
{
public Person Acquirer { get; set; }
public Certificate Certificate { get; set; }
public DateTime DateAcquired;
}
public class Certificate
{
public int Id { get; set; }
}
И вот схема, которая у меня есть:
CREATE TABLE People (
PersonId INT PRIMARY KEY
);
CREATE TABLE Certificates (
CertificateId INT PRIMARY KEY
);
CREATE TABLE CertificatesAcquiredByPeople (
PersonId INT,
CertificatedId INT,
DateAcquired DATETIME
);
Это придуманная схема и домен, но это почти то же самое, что и то, с чем я работаю. В настоящее время у меня это работает, когда я пишу объект третьего домена для представления таблицы CertificatesAcquiredByPeople, но мне это действительно кажется странным.
Как бы я отобразил это с помощью NHibernate? Я полагаю, что тег компонента в файле hbm должен делать то, что я хочу, но я не могу понять это.
Мой домен не в порядке, потому что у меня есть свойство DateAcquired в моем классе Certificate? Дата действительно касается только лица, имеющего сертификат.
[Изменить]
Теперь я изменил модель предметной области, чтобы отразить, что необходим новый объект. Теперь для сопоставления мне нужно 3 (для каждой сущности) сопоставления или я могу сделать это с 2 (для персоны и сертификата)?