2010-10-28 65 views
0

我已将IPreUpdateEventListener附加到nhibernate并且没有获得我期望的结果(保存子对象)。这个对象有附加的历史记录,如果某些事情发生了变化,它需要反映并保存它,没有什么大不了的?鉴于实体本身 - 承担ListOfHistory在构造函数中newed起来......Nhibernate IPreUpdateEventListener无法更新子对象

public class Car : IHaveHistory 
    { 
     //impl of IHaveHistory 
     public void AddHistory(string message, int parentId) 
     { 
      ListOfHistory.Add(new CarHistory { Message = message, ParentId = parentId }); 
     } 
     public ISet<CarHistory> ListOfHistory { get; private set; } 

    } 
    public class CarHistory 
    { 
     public int ParentId { get; set; } 
     public string Message { get; set; } 
    } 

...在其它的类...

public bool OnPreUpdate(PreUpdateEvent beforeUpdateEvent) 
    { 
     //greatly watered down ... but effectively ... 
     var car = beforeUpdateEvent.Entity as IHaveHistory; 
     if (car != null) 
      car.AddHistory(someId, aMessage); 

     return false; 
    } 

的OnPreUpdate事件触发,采取实体,确保其预期类型(IHaveHistory),并根据某些属性确定某些属性是否已更改。如果是,它将向ListOfHistory集合添加一个新的历史记录对象。不是火箭科学。

最令我困惑的是实体有这个历史记录,从事件标记它的所有方式一直回到控制器 - 但它不能保存。没有错误抛出,更糟的是 - 如果我手动添加它保存的历史对象,没有问题(所以我知道我的映射是好的)。

我很茫然,有什么想法?

回答

0

Session.SaveOrUpdateCopy(实体)是我需要的