J'ai attaché un IPreUpdateEventListener à nhibernate et n'obtient pas les résultats attendus (enregistrement d'un objet enfant). Cet objet a l'histoire qui s'y rattache et si certaines choses changent, il faut le refléter et le sauver, pas grave non? Compte tenu de l'entité en tant que telle - assumer ListOfHistory est newed dans un constructeur ...Nhibernate IPreUpdateEventListener ne parvient pas à mettre à jour l'objet enfant
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; }
}
... dans une autre classe ...
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;
}
L'événement se déclenche OnPreUpdate, prend l'entité , assure le type attendu (IHaveHistory) et détermine si certaines propriétés ont changé ou non en fonction de certains attributs. Si c'est le cas, il ajoute un nouvel objet d'historique à la collection ListOfHistory. Pas de science de fusée. Ce qui m'embrouille le plus, c'est que l'entité A cet enregistrement d'historique, depuis le moment où l'événement l'a marqué et tout le long du chemin vers le contrôleur - mais il ne sauvegarde tout simplement pas. Il n'y a pas d'erreurs lancées et pire - si j'ajoute manuellement cet objet historique, il enregistre, pas de problème (donc je sais que mes mappings sont bons).
Je suis à court d'idées?