Nhibernate IPreUpdateEventListener无法更新子对象

时间:2010-10-28 16:05:23

标签: nhibernate fluent-nhibernate

我已经将IPreUpdateEventListener附加到nhibernate而没有得到我期望的结果(保存子对象)。这个对象有附加的历史,如果某些事情发生变化,它需要反映并保存它,没什么大不了的?鉴于实体本身 - 假设ListOfHistory在构造函数中被新建......

    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集合中。不是火箭科学。

让我最困惑的是实体有这个历史记录,从事件标记它的所有时间开始一直到控制器 - 但它根本就没有保存。抛出错误并且更糟 - 如果我手动添加它保存的历史对象,没问题(所以我知道我的映射是好的)。

我不知所措,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Session.SaveOrUpdateCopy(entity)是我需要的