连接表中带有额外列的多对多映射

2024-01-15

这是我希望拥有的域名:

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 属性而出现问题?日期实际上只是拥有证书的人关心的问题。

[Edit]

我现在更改了域模型以反映需要一个新实体。现在对于映射,我需要 3 个(对于每个实体)映射还是可以使用 2 个(对于人员和证书)映射?


根据设计,如果除了保存多对多关系的中间(中间)表中表示的一对 FK 之外绝对没有其他任何东西,NHibernate 仅支持隐式多对多映射。

不久前,Billy McCafferty 在博客中谈到了这个确切的“问题”(由于其设计本身并不是一个真正的问题)......

http://devlicio.us/blogs/billy_mccafferty/archive/2008/07/11/when-to-use-many-to-one-s-vs-many-to-many-with-nhibernate.aspx http://devlicio.us/blogs/billy_mccafferty/archive/2008/07/11/when-to-use-many-to-one-s-vs-many-to-many-with-nhibernate.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接表中带有额外列的多对多映射 的相关文章

随机推荐