Which is the reason to do that ?Why you need it ?

2009/10/9 Ricardo Peres <[email protected]>

>
> Harm,
>
> See if this is what you need:
>
>
> http://weblogs.asp.net/ricardoperes/archive/2009/10/09/finding-dirty-properties-in-nhibernate.aspx
>
>
> On Oct 9, 10:27 am, Harm Neervens <[email protected]> wrote:
> > It should be:
> > string className = NHibernateProxyHelper.GuessClass(entity).FullName;
> >
> >  >3) Do you really need to know which property was changed ? for
> > what ?
> > Why I want this I described already in the first post.
> >
> > Harm.
> >
> > On 7 okt, 15:31, Fabio Maulo <[email protected]> wrote:
> >
> >
> >
> > > if (entity is INHibernateProxy)
> > >            {
> > >                className = entity.GetType().BaseType.FullName;
> > >            }Is not safe (have a look to INHibernateProxy).
> > > btw you should have a GuessEntityName in the ISessionFactoryImplementor
> (I
> > > don't remember exactly where I had put it).
> >
> > > Options/advise
> > > 1)
> > > public bool IsDirtyProperty<TEntity, TProp>(TEntity entity,
> > > Expression<Func<TEntity, TProp>> property)
> >
> > > to decode the expression
> > > if (expression.Body.NodeType != ExpressionType.MemberAccess)
> > > {
> > > throw ... isn't a property get}
> >
> > > return ((MemberExpression)expression.Body).Member.Name;
> >
> > > 2) Have a look to INotifyPropertyChanged (.NET FX)
> >
> > > 3) Do you really need to know which property was changed ? for what ?
> > > If you need to know if the UnitOfWork is dirty, you can use
> > > ISession.IsDirty()
> >
> > > 2009/10/7 Harm Neervens <[email protected]>
> >
> > > > Hi Fabio,
> >
> > > > That's not exactly what I meant. I want to determine if the property
> > > > is dirty before I flush the object/session.
> > > > But I found a solution that works for me. Can you tell me if it's
> save
> > > > to do it that way?
> >
> > > > My solution:
> >
> > > >        public bool IsDirtyProperty(IEntity entity, string
> > > > propertyName)
> > > >        {
> > > >            // Find the className of the Poco object
> > > >            string className = entity.GetType().FullName;
> >
> > > >            if (entity is INHibernateProxy)
> > > >            {
> > > >                className = entity.GetType().BaseType.FullName;
> > > >            }
> >
> > > >            ISessionImplementor session =
> > > > _Session.GetSessionImplementation();
> >
> > > >            IPersistenceContext persistenceContext =
> > > > session.PersistenceContext;
> >
> > > >            IEntityPersister persister =
> > > > session.Factory.GetEntityPersister(className);
> >
> > > >            EntityKey keyToLoad = new EntityKey(entity.ObjectIdentity,
> > > > persister, session.EntityMode);
> >
> > > >            object obj = session.GetEntityUsingInterceptor(keyToLoad);
> >
> > > >            EntityEntry oldEntry = session.PersistenceContext.GetEntry
> > > > (obj);
> >
> > > >            object[] oldState = oldEntry.LoadedState;
> > > >            object[] currentState = persister.GetPropertyValues(obj,
> > > > session.EntityMode);
> > > >            int[] dirtyProps = persister.FindDirty(currentState,
> > > > oldState, obj, session);
> >
> > > >            // Find the index of the propertyName
> > > >            int index = Array.IndexOf(persister.PropertyNames,
> > > > propertyName);
> >
> > > >            // Check if the index is in the dirtyProps array
> > > >            bool isDirty = Array.IndexOf(dirtyProps, index) != -1;
> >
> > > >            return isDirty;
> > > >        }
> >
> > > > Best regards,
> > > > Harm.
> >
> > > > On 7 okt, 02:24, Fabio Maulo <[email protected]> wrote:
> > > > >http://tinyurl.com/ydhgsgl
> > > > > 2009/10/6 Harm Neervens <[email protected]>
> >
> > > > > > Is it possible to find out if a property of an entity is changed/
> > > > > > dirty?
> > > > > > I have an entity Customer. When it's saved by the
> application/GUI, I
> > > > > > want to know if the Address property is dirty. If so, I have to
> write
> > > > > > a record to a log table.
> >
> > > > > --
> > > > > Fabio Maulo
> >
> > > --
> > > Fabio Maulo- Tekst uit oorspronkelijk bericht niet weergeven -
> >
> > > - Tekst uit oorspronkelijk bericht weergeven -
> >
>


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