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