We are developing an ERP system with using nhibernate.

My question is that:
We want to audit nhibernate objects lifecycle. And we are write code
on a listener class about that issue.

Update and Delete listeners works fine.
But PostInsertListener generate an error. It says “Collection was
modified” and error occure at nh session commit method.

We use IoC , windsor.

Code is below.

public class PostInsertEventListener : IPostInsertEventListener
    {
        public void OnPostInsert(PostInsertEvent @event)
        {

             var entity = @event.Entity as IEntity;

             if (entity != null)
             {
                 if (@event.Entity.ToString() == @"<my domain log
object string>"
                            || @event.Entity.ToString() == @"<my
domain log object string>")
                     return;

                 var now = DateTime.UtcNow;

                 var context = IoC.IoCManager.Resolve<IUserContext>();
                 var userId = context.GetUserId;

                 if (userId.HasValue)
                 {
                     var user =
@event.Session.Load<User>(userId.Value);
                     var id = Guid.NewGuid();

                     for (var i = 0; i <
@event.Persister.PropertyNames.Length; i++)
                     {


                         var newValue = @event.State[i];
                         var newValueType =
@event.Persister.PropertyTypes[i].ReturnedClass.BaseType;
                         var newValueTypeName = "";
                         if (newValueType != null)
                         {
                             newValueTypeName = newValueType.Name;
                         }

                         if (newValueTypeName == "Entity")
                         {
                             newValue = @event.State[i] == null ?
null : ((IEntity)@event.State[i]).Id.ToString();

                         }
                         if (newValue == null)
                         {
                             newValue = "";
                         }

                         var fieldName =
@event.Persister.PropertyNames[i];

                         if (fieldName == "VersionTimeStamp" ||
fieldName == "CreatedDate" || fieldName == "CreatedBy" ||
                             fieldName == "ModifiedBy" || fieldName ==
"ModifiedDate")
                         {
                             continue;
                         }

                         var erpDataChangeLog = new ERPDataChangeLog
                                                    {
                                                        CreatedBy =
user,
                                                        CreatedDate =
now,
                                                        Date = now,
                                                        Id =
Guid.NewGuid(),
                                                       Ip =
IPHelper.IpAddress(),
 
VersionTimeStamp = now,
                                                        ProcessId =
id,
                                                        NewValue =
"ooo",
                                                        Transaction =
"Insert",
                                                        User = user,
                                                        Object =
@event.Entity.ToString(),
                                                        FieldName =
"yyy"
                                                    };
                         @event.Session.Save(erpDataChangeLog);

                     }
                 }
             }
        }
    }

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" 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/nhusers?hl=en.

Reply via email to