views:

1055

answers:

2

I am performing a standard update in nhibernate to a single property. However on commit of the transaction the sql update seems to set all fields I have mapped on the table even though they have not changed. Surely this can't be normal behaviour in Nhibernate? Am I doing something wrong? Thanks

using (var session = sessionFactory.OpenSession())
           {
               using (var transaction = session.BeginTransaction())
               {
                   var singleMeeting = session.Load<Meeting>(10193);
                   singleMeeting.Subject = "This is a test 2";

                   transaction.Commit();
               }
           }
+1  A: 

Well. yes this is normal behaviour for NHibernate. You can use generated attribute for your properties to change the behaviour. Details on Ayende's blog.

Why is this default is because with dynamics you don't get your query plan cached. And usually you don't mind that you send few more bytes over high speed network connection between your application server and database. Unless you are saving long strings where this setting is perfectly appropriate.

Rashack
@Rashack While Generated means that the field will not be sent in through an update, it also means that the field is handled server-side. Instead NabilS is looking for those fields to be sent that have changed.
Lucas B
+5  A: 

This is the normal behavior. You can try adding dynamic-update="true" to your class definition to override this behavior.

Darin Dimitrov