nHibernate 保存一对多
Posted
技术标签:
【中文标题】nHibernate 保存一对多【英文标题】:nHibernate Save One-To-Many 【发布时间】:2010-01-20 22:19:28 【问题描述】:我有一个包含子列表的父类。在 cascade.all 开启的情况下,我将父级和子级映射为双向,并在父级上设置了一个 has-many 和一个逆向。如果我修改了子列表中的对象,但没有在父级上的属性,nHibernate 不会保存子级。如果我修改父级的属性,一切都会保存得很好。这是设计使然还是我需要设置特殊属性?
【问题讨论】:
您是在父映射中映射了子,还是在子映射中映射了父,或者两者都有? 两者如下: (Parent) HasMany这可能与您将子项添加到集合的方式有关。在双向中,您必须在代码中管理关系的双方。考虑来自Fluent Nhibernate Getting Started Guide 的示例。检查商店实体。
一家商店有很多员工。 Store 的 Staff 属性是员工的集合。该关系设置为双向。
Store有如下方法
public virtual void AddEmployee(Employee employee)
employee.Store = this;
Staff.Add(employee);
如您所见,childs Parent 属性需要设置为父对象。如果不这样做,那么 Nhibernate 将无法了解孩子的父母是谁,并且如果仅修改孩子并调用 SaveOrUpdate(parent),则无法自动保存孩子。
两者都需要。
【讨论】:
【参考方案2】:我想通了。我正在使用各种侦听器测试审计。当我附加到 IflushEntityListner 时,它导致保存停止工作。真是令人沮丧。谢谢大家!
【讨论】:
以上是关于nHibernate 保存一对多的主要内容,如果未能解决你的问题,请参考以下文章