Я довольно новичок в nHibernate, так что это, вероятно, довольно глупый вопрос. Но в любом случае сохранение объекта работает нормально, обновление не работает.
Вот что я делаю:
using (ISession session = _sessionFactory.OpenSession())
{
session.SaveOrUpdate(schemaChange);
schemaChange.ScriptName = "New one";
session.SaveOrUpdate(schemaChange);
}
Первый SaveOrUpdate вставляет schemaChange в базу данных. Второй должен обновить тот же объект, но nHibernate этого не делает.
В результате я получаю:
DEBUG - постоянный экземпляр: DotNetMigrations.Core.Domain.SchemaChange
DEBUG - игнорирование постоянного экземпляра
DEBUG - объект, уже связанный с сеансом: [DotNetMigrations.Core.Domain.SchemaChange # 129]
UPDATE
Ну, как это было так просто (и глупый вопрос), я нашел это сам:
session.SaveOrUpdate(schemaChange);
schemaChange.ScriptName = "New one";
session.Flush();
Имеет смысл. nHibernate действительно превосходит любой инструмент orm, с которым я работал.
Похоже, я не могу понять, почему существует метод SaveOrUpdate ... Если вы обновляете, то объект автоматически не ассоциируется с сеансом? (потому что вы получили его из базы данных первым способом. Если, конечно, вы не отправили его, например, в Flex RIA, и он вернулся)
Итак, как вы узнаете, если объект уже связан, чтобы сделать SaveOrUpdate () или просто Flush ()?