保存父对象的最佳方法

时间:2011-09-24 17:10:00

标签: nhibernate

只是想知道保存通常包含Child对象集合(在我的情况下是多对多)的Parent的最佳实践是什么,但是Parent中的那个集合当前设置为null,因为它还没有装?

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

我知道有几个Child对象链接到数据库中的Parent,但'children'属性当前为null。

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

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

1)单独加载子项,然后将Parent的子集合设置为它们,然后保存父项(有效,但这是数据库的额外行程)。

2)仅使用HQL或Native SQL发布简单属性的更新。

更新:我不确定我的级联行为实际上是否正常工作。从文档来看,它表明NHibernate不会搞乱我的收藏,除非cascade设置为save-update,all-delete-orphan等。但这是我的映射

(来自Order.hbm.xml)

<bag name="OrderItems" table="order_item" cascade="none" lazy="true">
  <key column ="order_id" />
  <many-to-many class="MenuItem" column="item_id"/>
</bag>

当Order.OrderItems为null,并且我使用SaveOrUpdate(Order)保存我的Order对象时,它肯定会删除该集合。我希望它们得以保存。我的配置是错误还是什么?

由于

1 个答案:

答案 0 :(得分:1)

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