Zdeslav, thanks for the suggestion, but I think my testing framework was not set up properly. I tried my experiment on my working application and it produced the old and new states. I am going to have to examine my testing framework to see what is missing to enable unit testing my event listeners.
Anybody have a good example of testing nhibernate event listeners? Jason On Wed, Aug 5, 2009 at 1:11 PM, Zdeslav Vojkovic<[email protected]> wrote: > Have you tried calling SaveCopy instead of Save? > > On Wed, Aug 5, 2009 at 2:03 AM, jsmorris <[email protected]> wrote: >> >> I am attempting to use NHibernate Events to audit my ActiveRecord >> objects for changes. My attempts have always resulted in the OldState >> on the PreUpdateEvent object is null. Thus, I cannot check if the >> State has changed. In the below code, in the FindDirty method, >> @event.OldState is null. >> >> Searching the net has helped me construct my sample code, but others >> have mentioned this null oldstate problem as well. The answers to fix >> the problem have generally referred to NHibernate based solutions (and >> I am not sure I understand them), but was wondering if anyone has >> ideas how to fix this using ActiveRecord. >> >> Thanks, >> Jason >> >> My current sample code >> >> [TestFixture] >> public class SampleEventListenerTestFixture : DomainTestFixture<Sample> >> { >> [Test] >> public void Update() >> { >> var sample = new Sample() { Name = "OldName" }; >> >> sample.Save(); >> >> sample.Name = "New Name"; >> >> sample.Save(); >> } >> } >> >> [EventListener] >> public class SampleEventListener : IPreUpdateEventListener, >> IPostUpdateEventListener >> { >> public void OnPostUpdate(PostUpdateEvent @event) >> { >> var entity = @event.Entity as Sample; >> >> if (entity == null) >> return; >> } >> >> public Boolean OnPreUpdate(PreUpdateEvent @event) >> { >> FindDirty(@event); >> >> return false; >> } >> >> private static void FindDirty(PreUpdateEvent @event) >> { >> var dirtyFieldIndexes = >> @event.Persister.FindDirty(@event.State, @event.OldState, >> @event.Entity, @event.Session); >> >> foreach (var dirtyFieldIndex in dirtyFieldIndexes) >> { >> var oldValue = @event.OldState[dirtyFieldIndex]; >> var newValue = @event.State[dirtyFieldIndex]; >> >> // Log values to new "AuditLog" object and save >> appropriately. >> } >> } >> } >> >> [ActiveRecord] >> public class Sample : DomainObject<Sample> >> { >> [Castle.ActiveRecord.Property] >> public String Name { get; set; } >> } >> >> > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
