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
-~----------~----~----~----~------~----~------~--~---

Reply via email to