Первый пример будет работать, потому что вы обновляете тот же объект, полученный через сеанс NHibernate.
Во втором примере возможен сбой, поскольку TryUpdateModel () может заменить свойства вашего профиля (если существуют соответствующие данные ValueProvider). Если случайно вы отправляете данные обратно для одного из этих свойств, включая Id, метод TryUpdateModel () может заменить один из объектов, первоначально полученных через сеанс NHibernate. Когда вы попытаетесь сохранить профиль, NHibernate обнаружит, что вы не редактировали исходный объект, но пытаетесь сохранить другой объект с точно таким же идентификатором. Это приведет к исключению NonUniqueObjectException.
Чтобы решить эту проблему, вы должны убедиться, что обновляете значения исходных сущностей, извлеченных из сеанса. Я бы порекомендовал вам избегать использования DefaultModelBinder непосредственно для сущностей из вашего домена, для которых вы ожидаете, что будет выполнено отслеживание изменений.