【问题标题】:NHibernate (References) OneToManyNHibernate(参考)OneToMany
【发布时间】:2012-12-10 17:44:30
【问题描述】:

我有:

DailyWorkTimeMapping()
{
....
     References(x => x.Employee);
}

所以,当我这样做时:

var x = new DailyWorkTime()
{
    Employee = new Employee()
       {
          Id = IdFromAnExistingEmployee,
       };

}

当我打电话给SaveOrUpdate 时,我收到以下错误:

NHibernate.TransientObjectException: 对象引用了一个未保存的对象 瞬态实例 - 在刷新之前保存瞬态实例或 将属性的级联动作设置为可以使它的东西 自动保存。类型:ProjectTracker.Domain.Employees.Employee,实体: ProjectTracker.Domain.Employees.Employee bei NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(字符串 entityName, Object entity, ISessionImplementor session)

有什么想法吗?

【问题讨论】:

  • 错误本身告诉您将未保存的实体Employee 附加到主实体DailyWorkTime。您需要在关系上使用级联或保存Employee,然后再将其附加到DailyWorkTime

标签: nhibernate


【解决方案1】:

如果您尝试在 DailyWorkTime 实例上调用 save,您需要将 Employee 属性标记为级联。

References(x => x.Employee).Cascade.All();

或者,您可以在保存 DailyWorkTime 之前保存 Employee 对象

var normalHours = new DailyWorkTime();
normalHours.Employee = new Employee() { Id = 1234};
session.SaveOrUpdate(normalHours.Employee);
session.SaveOrUpdate(normalHours);

【讨论】:

    【解决方案2】:

    在您从 Employee 表上的 OneToMany 映射。将映射设置为反向。这将意味着孩子控制保存。

    【讨论】:

    • 谢谢大家。问题是我使用了两个不同的会话。
    • 问题是我使用了两个不同的会话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多