Ok, I'll look into it. But now I am intrigued why interceptor is not
being called. I am just trying to understand how to implement
interceptor. For intereceptor to work I don't have to override any
listeners or?

On Mar 18, 9:50 pm, Fabio Maulo <[email protected]> wrote:
> epitka.... the two listener I sent you are to change the behavior of
> "IsTransient" during Save and SaveOrUpdate
>
> 2009/3/18 epitka <[email protected]>
>
>
>
>
>
> > So is this change to way interceptors work. Because all doc.-s I found
> > do not mention overriding listeners, just registering the interceptors
> > with factor or with session.
>
> > On Mar 18, 11:33 am, Fabio Maulo <[email protected]> wrote:
> > > That method is called in... well...what you are looking for, probably, is
> > > the override of
> > > DefaultSaveEventListener, DefaultSaveOrUpdateEventListener
>
> > > 2009/3/18 epitka <[email protected]>
>
> > > > Thanks,
> > > > Reason I was asking is because I cannot get the interceptor to be
> > > > called. I registered it with a session
> > > > like this
>
> > > > return SessionFactory.OpenSession(new IsTransientInterceptor());
>
> > > > and repository calls SaveOrUpdate on the session.
> > > > But the interceptor does not get called. I know I have dirty items in
> > > > a collection and I can see in trying to update. What else do I need to
> > > > do to get a call to interceptor?
>
> > > > Here is intereceptor imlementation
>
> > > >  public class IsTransientInterceptor :
> > > > global::NHibernate.EmptyInterceptor
> > > >    {
> > > >        public  void SetSession(ISession session)
> > > >        {
> > > >            base.SetSession(session);
> > > >        }
>
> > > >        public bool OnLoad(object entity, object id, object[] state,
> > > > string[] propertyNames, IType[] types)
> > > >        {
> > > >            base.OnLoad(entity, id, state, propertyNames, types);
> > > >            if (entity is IIsTransient) ((IIsTransient)entity).OnLoad
> > > > ();
> > > >            return false;
> > > >        }
>
> > > >        public bool OnSave(object entity, object id, object[] state,
> > > > string[] propertyNames, IType[] types)
> > > >        {
> > > >            base.OnSave(entity, id, state, propertyNames, types);
> > > >            if (entity is IIsTransient) ((IIsTransient)entity).OnSave
> > > > ();
> > > >            return false;
> > > >        }
>
> > > >        public bool? IsTransient(object entity)
> > > >        {
> > > >            base.IsTransient(entity);
> > > >            if (entity is IIsTransient)
> > > >            {
> > > >                return ((IIsTransient)entity).IsTransient;
> > > >            }
>
> > > >            return false;
> > > >        }
> > > >    }
>
> > > > here is the log
>
> > > > 2009-03-18 11:03:05,494 [Task: Test Runner] DEBUG
> > > > NHibernate.AdoNet.ConnectionManager [(null)] - registering flush begin
> > > > 2009-03-18 11:03:05,494 [Task: Test Runner] DEBUG
> > > > NHibernate.Persister.Collection.ICollectionPersister [(null)] -
> > > > Deleting rows of collection:
> > > > [SR.Domain.Client.Entities.Client.AccountTypeHistory#921115600]
> > > > 2009-03-18 11:03:05,494 [Task: Test Runner] DEBUG
> > > > NHibernate.Persister.Collection.ICollectionPersister [(null)] - no
> > > > rows to delete
> > > > 2009-03-18 11:03:05,510 [Task: Test Runner] DEBUG
> > > > NHibernate.Persister.Collection.ICollectionPersister [(null)] -
> > > > Updating rows of collection:
> > > > SR.Domain.Client.Entities.Client.AccountTypeHistory#921115600
> > > > 2009-03-18 11:03:05,510 [Task: Test Runner] DEBUG
> > > > NHibernate.Persister.Collection.ICollectionPersister [(null)] - done
> > > > updating rows: 0 updated
> > > > 2009-03-18 11:03:05,510 [Task: Test Runner] DEBUG
> > > > NHibernate.Persister.Collection.ICollectionPersister [(null)] -
> > > > Inserting rows of collection:
> > > > [SR.Domain.Client.Entities.Client.AccountTypeHistory#921115600]
> > > > 2009-03-18 11:03:05,510 [Task: Test Runner] DEBUG
> > > > NHibernate.AdoNet.AbstractBatcher [(null)] - Opened new IDbCommand,
> > > > open IDbCommands: 1
> > > > 2009-03-18 11:03:05,510 [Task: Test Runner] DEBUG
> > > > NHibernate.AdoNet.AbstractBatcher [(null)] - Building an IDbCommand
> > > > object for the SqlString: UPDATE PRDPROD.dbo.ClientAcctType SET
> > > > ClientId = ?, EffDt = ? WHERE ClientId = ? AND EffDt = ?
> > > > 2009-03-18 11:03:05,526 [Task: Test Runner] DEBUG
> > > > NHibernate.Engine.IdentifierValue [(null)] - unsaved-value strategy
> > > > NONE
> > > > 2009-03-18 11:03:05,526 [Task: Test Runner] DEBUG
> > > > NHibernate.Transaction.AdoTransaction [(null)] - Enlist Command
> > > > 2009-03-18 11:03:05,557 [Task: Test Runner] DEBUG
> > > > NHibernate.AdoNet.AbstractBatcher [(null)] - Closed IDbCommand, open
> > > > IDbCommands: 0
> > > > 2009-03-18 11:03:05,604 [Task: Test Runner] ERROR
> > > > NHibernate.Event.Default.AbstractFlushingEventListener [(null)] -
> > > > Could not synchronize database state with session
> > > > NHibernate.StaleStateException: Unexpected row count: 0; expected: 1
>
> > > > On Mar 18, 11:02 am, Fabio Maulo <[email protected]> wrote:
> > > > > No
>
> > > > > 2009/3/18 epitka <[email protected]>
>
> > > > > > Hi, Is there a way to use IsTransient from event listeners rather
> > then
> > > > > > implementing interceptors.
>
> > > > > --
> > > > > Fabio Maulo
>
> > > --
> > > Fabio Maulo
>
> --
> Fabio Maulo
--~--~---------~--~----~------------~-------~--~----~
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