2012-12-10 31 views
0

我:NHibernate的(参考)一对多

所以,当我这样做:

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

} 

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

NHibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing or set cascade action for the property to something that would make it autosave. Type: ProjectTracker.Domain.Employees.Employee, Entity: ProjectTracker.Domain.Employees.Employee bei NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName, Object entity, ISessionImplementor session)

任何想法?

+0

错误本身就是告诉你,你将一个未保存的实体'Employee'附加到你的主实体'DailyWorkTime'。您需要在关系上使用级联或在将其附加到'DailyWorkTime'之前保存'Employee'。 – frictionlesspulley

回答

0

如果您尝试调用DailyWorkTime实例的保存,则需要将Employee属性标记为级联。

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

或者您从映射一对多保存DailyWorkTime

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

你在Employee表,然后才能保存Employee对象。将映射设置为反转。这将意味着孩子控制保存。

+0

感谢所有。问题是我利用两个不同的会话。 – user1892377

+0

问题是我使用两个不同的会话。 – user1892377