Ваш рабочий процесс не верный.
Во-первых, когда вы извлекаете объект из базы данных, session.Update(entity)
ничего не делает. Изменения произойдут автоматически на Flush/Commit
Далее Evict
удаляет все знания об объекте, которые есть в сеансе, поэтому он не сохранит никаких изменений, примененных к нему. Вы почти никогда не должны использовать этот метод в нормальных условиях, что заставляет меня думать, что вы неправильно обрабатываете сеанс.
В-третьих, тот факт, что использование identity
заставляет вставки немедленно произойти на Save
, является ограничением, а не функцией.
Правильный рабочий процесс:
using (var session = factory.OpenSession())
using (var transaction = session.BeginTransaction())
{
var entity = session.Get<EntityType>(id);
entity.SomeProperty = newValue;
transaction.Commit();
}
Структура точная (операторы using
и т. Д.) Может измениться в настольном приложении, но основная идея та же.