我已经将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集合中。不是火箭科学。
让我最困惑的是实体有这个历史记录,从事件标记它的所有时间开始一直到控制器 - 但它根本就没有保存。抛出错误并且更糟 - 如果我手动添加它保存的历史对象,没问题(所以我知道我的映射是好的)。
我不知所措,有什么想法吗?
答案 0 :(得分:0)
Session.SaveOrUpdateCopy(entity)是我需要的