NHibernate一对多外键为空
我对NHibernate有意见。我想说的很简单: 我有两节课。UserTicket和UserData。UsertTicket有一些UserData,UserData属于一个UserTicket:NHibernate一对多外键为空,nhibernate,null,foreign-keys,one-to-many,Nhibernate,Null,Foreign Keys,One To Many,我对NHibernate有意见。我想说的很简单: 我有两节课。UserTicket和UserData。UsertTicket有一些UserData,UserData属于一个UserTicket: public class UserData{ public virtual int Id { get; set; } public virtual String PDF_Path { get; set; } } public class UserTicket { public
public class UserData{
public virtual int Id { get; set; }
public virtual String PDF_Path { get; set; }
}
public class UserTicket
{
public virtual int Ticketnr { get; set; }
public virtual IList<UserData> UserData { get; set; }
}
公共类用户数据{
公共虚拟整数Id{get;set;}
公共虚拟字符串PDF_路径{get;set;}
}
公共类用户票
{
公共虚拟int Ticketnr{get;set;}
公共虚拟IList用户数据{get;set;}
}
这里是mappig xml:
<class name="UserTicket" table="UserTicket">
<id name="Ticketnr">
<generator class="identity"/>
</id>
<bag name="UserData" inverse="true" cascade="all-delete-orphan" lazy="false">
<key column="FK_Ticketnr" not-null="false"/>
<one-to-many class="UserData" />
</bag>
</class>
<class name="UserData" table="UserData">
<id name="Id">
<generator class="identity"/>
</id>
<property name="PDF_Path" />
</class>
当我运行它时,它可以工作,但是UserData的DB表中的FK_Ticketnr列总是=NULL。
有人告诉我必须从我的孩子(UserData)到父类建立一个反向链接。但我不知道怎么做。如何让Hibernate将UserTicket的主键(Ticketnr)的值写入FK_Ticketnr
提前感谢取下您包上的Reverse=“true”。这就告诉NHibernate,关系是通过UserData映射来管理的。因为没有反向引用,所以它永远不会持久化。另一个选项是在UserData上放置一个父引用,但如果您不需要它,我不建议您这样做。在您的包上删除reverse=“true”。这就告诉NHibernate,关系是通过UserData映射来管理的。因为没有反向引用,所以它永远不会持久化。另一个选项是在UserData上放置一个父引用,但如果您不需要它,我不建议您使用它。另一种选择是以下
public class UserData
{
// Keep your other properties, add this one too...
public virtual UserTicket Ticket { get; set; }
}
像这样修改映射文件
<class name="UserData" table="UserData">
<id name="Id">
<generator class="identity" />
</id>
<property name="PDF_Path" />
<many-to-one name="Ticket" column="FK_Ticketnr" />
</class>
将inverse=“true”
放在袋子上
如果采用这种方法,则在将UserData对象添加到UserData包时,需要在其上设置票证。换句话说,你需要维持关系的双方。您可以手动执行此操作,也可以尝试使用方法或构造函数将其自动化一点。替代方法如下
public class UserData
{
// Keep your other properties, add this one too...
public virtual UserTicket Ticket { get; set; }
}
像这样修改映射文件
<class name="UserData" table="UserData">
<id name="Id">
<generator class="identity" />
</id>
<property name="PDF_Path" />
<many-to-one name="Ticket" column="FK_Ticketnr" />
</class>
将inverse=“true”
放在袋子上
如果采用这种方法,则在将UserData对象添加到UserData包时,需要在其上设置票证。换句话说,你需要维持关系的双方。您可以手动执行此操作,也可以尝试使用方法或构造函数将其自动化一点。哇,谢谢!成功了。你真的救了我一天。祝你过得愉快。哇,谢谢!成功了。你真的救了我一天。祝你过得愉快。