I've never been able to do it any other way. NH usually sends SQL to update all columns of a mapped entity. In that case, the convenient way to do it with ODS would probably be to use ISession.SaveOrUpdateCopy(), but it will result in a SELECT before doing an UPDATE.
I presume you've already read:
http://www.hibernate.org/hib_docs/nhibe ... g-detached
I don't have any experience with it, but it is possible to configure NH to only update the *changed* properties of an entity. They generally don't advise it because it requires more on-the-fly SQL generation that could degrade performance. However, it may be possible to enable that, associate a "default" version of the object with the session (as described in
http://www.hibernate.org/hib_docs/nhibe ... pdate-lock), and then perhaps ISession.Update would result in only updating the changed columns.
Again, I haven't tried it, but would be interested to know whether it would work.