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>