Asp.net 如何映射其子项与Nhibernate位于同一表中的项?
我正在尝试构建一个消息传递系统,为此,我有下面的表定义 信息Asp.net 如何映射其子项与Nhibernate位于同一表中的项?,asp.net,nhibernate,nhibernate-mapping,mapping,Asp.net,Nhibernate,Nhibernate Mapping,Mapping,我正在尝试构建一个消息传递系统,为此,我有下面的表定义 信息 Id From To Body ParentId // Subcollection, i want to get Asnwers (Message.ParentId== Message.Id) IsRead 我在Message.cs中有这个 IList<Message> Answers; IList答案; 我尝试过这个,但它给了我所有的信息和所有的答案,在主要收集 但我不希望答案被视为一条信息(如主要内容)。 <
Id
From
To
Body
ParentId // Subcollection, i want to get Asnwers (Message.ParentId== Message.Id)
IsRead
我在Message.cs中有这个
IList<Message> Answers;
IList答案;
我尝试过这个,但它给了我所有的信息和所有的答案,在主要收集
但我不希望答案被视为一条信息(如主要内容)。
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="RealEstate.Core" namespace="RealEstate.Core.Domain">
<class name="Message" table="Message" lazy="true">
<id column="id" type="Int64" name="Id">
<generator class="native" />
</id>
<property name="From" column="[From]" type="Int64" />
<property name="To" column="[To]" type="Int64" />
<property name="Body" column="Body" />
<property name="ParentId" column="ParentId" type="Int64" />
<property name="SenderType" column="SenderType" type="Byte" />
<property name="IsRead" column="IsRead" type="Boolean" />
<bag name="Answers" lazy="true" cascade="delete">
<key column="ParentId" />
<one-to-many class="Message"/>
</bag>
</class>
</hibernate-mapping>
如果它们在同一个表中,如何进行映射
非常感谢您在尝试回答之前,我强烈建议您搜索,因为那里潜伏着大量帮助NHibernate的人,他们回答各种问题 但让我看看我能不能帮上忙 嗯,我不太确定我是否理解这个问题。你说: 我试过这个,但它给了我一切 信息和所有答案在 主要收藏 但我不想让人看到答案 像一条消息(像主项) 您的意思是
答案集合包含数据库中的所有答案吗
你能发布更多的代码,显示你正在运行的查询和类代码吗
场景中的一个潜在问题是数据库中的ParentId
可能是NULL
。这会在映射一对多时产生NHibernate问题
试着建立联系。这有时有助于避免一些陷阱
要做到这一点,请将此添加到您的类中
public class Message {
///<summary>Reference to parent message</summary>
public Message Parent {get;set;}
//... rest of class
看起来是这样的:
public void AddAnswer(Message answer)
{
answer.Parent = this;
if( ! this.Answers.Contains(answer) )
this.Answers.Add(answer);
}
希望这有帮助。你想映射一棵树吗?
也许这会有帮助:
非常感谢您的帮助,但这正是我想要再次感谢的
someMessage.AddAnswer( someAnswer );
public void AddAnswer(Message answer)
{
answer.Parent = this;
if( ! this.Answers.Contains(answer) )
this.Answers.Add(answer);
}