Nhibernate 保存父对象的最佳方法

Nhibernate 保存父对象的最佳方法,nhibernate,Nhibernate,只是想知道保存通常包含子对象集合(在我的例子中是多对多)的父对象的最佳实践是什么,但是父对象中的集合当前设置为null,因为它尚未加载 在我的例子中,父级从网页传递到我的服务层。该网页仅从表单填充父级的简单属性 我知道数据库中有多个子对象链接到父对象,但“children”属性当前为空 如果我保存父项,即使我的子项设置为cascade=“none”,当我保存父项时,所有链接都会被删除(我甚至可以在日志中看到delete语句NHibernate问题) 我可以想出几种方法来解决这个问题: 1) 分别

只是想知道保存通常包含子对象集合(在我的例子中是多对多)的父对象的最佳实践是什么,但是父对象中的集合当前设置为null,因为它尚未加载

在我的例子中,父级从网页传递到我的服务层。该网页仅从表单填充父级的简单属性

我知道数据库中有多个子对象链接到父对象,但“children”属性当前为空

如果我保存父项,即使我的子项设置为cascade=“none”,当我保存父项时,所有链接都会被删除(我甚至可以在日志中看到delete语句NHibernate问题)

我可以想出几种方法来解决这个问题:

1) 分别加载子项,然后将父项的子项集合设置为它们,然后保存父项(可以工作,但这是对数据库的额外访问)

2) 使用HQL或本机SQL仅对简单属性发布更新

更新:我不确定我的级联行为实际上是否正常工作。从文档中可以看出,除非cascade设置为保存更新、全部删除孤立项等,否则NHibernate不会干扰我的集合。但这是我的映射

(来自Order.hbm.xml)


当Order.OrderItems为null,并且我使用SaveOrUpdate(Order)保存我的Order对象时,它将明确删除集合。我想把它们保存下来。我的配置有问题吗


谢谢

我实际上不会使用真正的父对象将数据从UI传递到服务层。相反,您可以实现一个轻量级类(),该类只包含这些基本属性,然后将其传递给服务层并填充(手动或使用)父级属性

我实际上不会使用真正的父对象将数据从UI传递到服务层。相反,您可以实现一个轻量级类(),该类只包含这些基本属性,然后将其传递给服务层并填充(手动或使用)父级属性

谢谢你的回复。我确实考虑过了,尽管老实说,我只想拥有一套域名对象。我曾在大型项目(Java)中工作过,在这些项目中,维护DTO已经成为一个需要维护的噩梦(使它们与实体保持同步)。目前,我已经使用HQL更新“查询”解决了我的问题,该查询只涉及我当时关心的对象。尽管我确信NHibernate中一定有一面旗帜来做我想做的事情,但它仍然很整洁。再次感谢。当然,在任何地方使用DTO都不是强制性的,而是在最有意义的地方。谢谢回复。我确实考虑过了,尽管老实说,我只想拥有一套域名对象。我曾在大型项目(Java)中工作过,在这些项目中,维护DTO已经成为一个需要维护的噩梦(使它们与实体保持同步)。目前,我已经使用HQL更新“查询”解决了我的问题,该查询只涉及我当时关心的对象。尽管我确信NHibernate中一定有一面旗帜来做我想做的事情,但它仍然很整洁。再次感谢。当然,在任何地方使用DTO都不是强制性的,而是在最有意义的地方。
<bag name="OrderItems" table="order_item" cascade="none" lazy="true">
  <key column ="order_id" />
  <many-to-many class="MenuItem" column="item_id"/>
</bag>