取得したいドメインは次のとおりです。
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 テーブルを表す 3 番目のドメイン エンティティを作成することで機能していますが、それは本当に奇妙に思えます。
NHibernate を使用してこれをどのようにマップしますか? hbm ファイルのコンポーネント タグは、目的どおりに動作するはずですが、よくわかりません。
Certificate クラスに DateAcquired プロパティがあるため、私のドメインはおかしくなっていますか? 日付は、証明書を持っている人の関心事です。
[編集]
新しいエンティティが必要であることを反映するために、ドメイン モデルを変更しました。マッピングには 3 つの (エンティティごとに) マッピングが必要ですか、それとも 2 つ (個人と証明書の場合) で行うことができますか?