2010-01-20 63 views
1

我有一个包含子项列表的父类。父级和子级映射双向has-many和父级cascade.all都打开。如果我在子列表中修改一个对象,但在父项中没有属性,nHibernate不保存该子项。如果我修改父级的属性,一切都可以保存。这是由设计还是有一个特殊的属性,我需要设置?nHibernate保存一对多

+0

您是否将子映射到父映射中,父映射在子映射中还是两者都映射? – hackerhasid 2010-01-20 22:21:13

+0

两者如下: (Parent) HasMany (x => x.Initiatives).KeyColumns.Add(“ProjectId”)。AsBag()。Cascade.SaveUpdate()。LazyLoad()。Inverse(); (Child) 引用(x => x.ParentProject).Column(“ProjectId”)。Cascade.SaveUpdate(); – 2010-01-20 22:40:09

+0

我相信你必须打电话给家长保存以保存孩子。 – snicker 2010-01-20 23:22:09

回答

0

这可能与您将孩子添加到集合中的方式有​​关。在双向中,您必须在代码中管理关系的两个方面。考虑一下Fluent Nhibernate Getting Started Guide的例子。检查商店实体。

一家商店有许多员工。 Store的员工财产是员工的集合。关系设置为双向。

商店有以下方法

public virtual void AddEmployee(Employee employee) 
{ 
    employee.Store = this; 
    Staff.Add(employee); 
} 

正如你所看到的,孩子的父母财产需要设置父对象。如果没有这样做,那么Nhibernate将无法理解孩子的父母是谁,如果只修改了孩子并且调用了SaveOrUpdate(父母),则无法自动保存孩子。

你需要做到这两点。

+0

我正在那样做。 – 2010-01-20 23:27:59

0

我想通了。我正在使用各种列表器测试审计。当我连接到IFlushEntityListner时,它导致保存停止工作。 Geez令人沮丧。感谢大家!