【问题标题】:nHibernate Save One-To-ManynHibernate 保存一对多
【发布时间】:2010-01-20 22:19:28
【问题描述】:

我有一个包含子列表的父类。在 cascade.all 开启的情况下,我将父级和子级映射为双向,并在父级上设置了一个 has-many 和一个逆向。如果我修改了子列表中的对象,但没有在父级上的属性,nHibernate 不会保存子级。如果我修改父级的属性,一切都会保存得很好。这是设计使然还是我需要设置特殊属性?

【问题讨论】:

  • 您是在父映射中映射了子,还是在子映射中映射了父,或者两者都有?
  • 两者如下: (Parent) HasMany(x => x.Initiatives).KeyColumns.Add("ProjectId").AsBag().Cascade.SaveUpdate().LazyLoad() 。逆(); (子) 参考(x => x.ParentProject).Column("ProjectId").Cascade.SaveUpdate();
  • 我相信你必须在 Parent 上调用 save 才能让它拯救孩子。
  • 谢谢,但我打电话给父母保存。问题是,如果 a 不修改父级上的简单属性,则不会触发子级的保存。如果我修改父级的简单属性,则子级更改保存正常。

标签: nhibernate orm


【解决方案1】:

这可能与您将子项添加到集合的方式有关。在双向中,您必须在代码中管理关系的双方。考虑来自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 时,它导致保存停止工作。真是令人沮丧。谢谢大家!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 2010-10-06
      • 2017-09-03
      • 1970-01-01
      相关资源
      最近更新 更多