这是我希望拥有的域名:
public class Person { public int Id { get; set; } public IListAcquiredCertificates { 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属性?该日期实际上只是具有证书的人员的关注点.
[编辑]
我现在改变了域模型,以反映需要一个新的实体.现在为映射我需要3(对于每个实体)映射还是我可以用2(对于人员和证书)?
根据设计,如果除了在中间(中间)表中表示的具有多对多关系的FK对之外,NHibernate仅支持隐式的多对多映射.
前一段时间,Billy McCafferty在博客上写了这个确切的"问题"(自BY DESIGN以来并不是真正的问题)......
http://devlicio.us/blogs/billy_mccafferty/archive/2008/07/11/when-to-use-many-to-one-s-vs-many-to-many-with-nhibernate.aspx