2010-10-28 5 views
0

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?

Répondre

0

Session.SaveOrUpdateCopy (entité) est ce dont j'avais besoin

Questions connexes