C# NHibernate中多对一关联的问题

C# NHibernate中多对一关联的问题,c#,nhibernate,C#,Nhibernate,我有两门课: public class Article { private ISet<IdentNumber> identNumbers = new HashedSet<IdentNumber>(); public virtual int ArticleId { get; set; } public virtual string ArticleNumber { get; set; } private virtual ISet<I

我有两门课:

public class Article
{
    private ISet<IdentNumber> identNumbers = new HashedSet<IdentNumber>();

    public virtual int ArticleId { get; set; }

    public virtual string ArticleNumber { get; set; }

    private virtual ISet<IdentNumber> IdentNumbers

    public virtual void AddIdentNumber(IdentNumber identNumber)
    {
        if (identNumber.Article != null && identNumber.Article.identNumbers != null)
        {
            identNumber.Article.identNumbers.Remove(identNumber);
        }

        identNumber.Article = this;
        this.IdentNumbers.Add(identNumber);
    }
}

public class IdentNumber
{
    public virtual int Number { get; set; }

    public virtual int ArticleId { get; set; }

    public virtual Article Article { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null)
        {
            return false;
        }

        var x = obj as IdentNumber;
        if (x == null)
        {
            return false;
        }

        return this.Number == x.Number && this.ArticleId == x.ArticleId;
    }

    public override int GetHashCode()
    {
        return (this.ArticleId + "|" + this.Number).GetHashCode();
    }
} 
我不能用一部分外键来完成这个复合pk

谢谢你的帮助

编辑:

多亏了Falcon,我得到了正确的映射

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Article" table="Articles">
    <id name="ArticleId" unsaved-value="0">
      <generator class="native" />
    </id>
    <property name="ArticleNumber" />
    <set name="IdentNumbers" table="IdentNumbers" cascade="all">
      <key column="ArticleId" />
      <one-to-many class="IdentNumber" />  
    </set>
  </class>
</hibernate-mapping>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="IdentNumber" table="IdentNumbers">
    <composite-id>
      <key-many-to-one name="Article" column="ArticleId"/>
      <key-property name="Number" />
    </composite-id>
  </class>
</hibernate-mapping>


您不需要ArticleID!只需将对文章类的引用映射为PK的一部分!当您设置IdentNumber的项目时,您已经使用该部分键进行了统计。

您不需要项目ID!只需将对文章类的引用映射为PK的一部分!当您设置IdentintNumber的项目时,您已经使用该部分项进行了统计。

您的映射与您的描述不符-请参阅,以获取我认为您正在尝试执行的操作的示例。我尝试使用复合id和多对一项中的项目id,但我无法指定generator class=“foreign”您的映射与您的描述不符-请参阅,以获取我认为您正在尝试执行的操作的示例。我尝试使用复合id,其中ArticleId的键为多对一,但我无法在这方面指定generator class=“foreign”。谢谢,这样做了。用新的映射编辑了我的帖子。谢谢,成功了。用新映射编辑了我的帖子。
var article = new Article { ArticleNumber = "9876" };
var identNumber = new IdentNumber { Number = 1234 };
article.AddIdentNumber(identNumber);

session.Save(article);
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Article" table="Articles">
    <id name="ArticleId" unsaved-value="0">
      <generator class="native" />
    </id>
    <property name="ArticleNumber" />
    <set name="IdentNumbers" table="IdentNumbers" cascade="all">
      <key column="ArticleId" />
      <one-to-many class="IdentNumber" />  
    </set>
  </class>
</hibernate-mapping>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="IdentNumber" table="IdentNumbers">
    <composite-id>
      <key-many-to-one name="Article" column="ArticleId"/>
      <key-property name="Number" />
    </composite-id>
  </class>
</hibernate-mapping>