2012-01-30 4 views
0

Каков наилучший способ избежать внесения нежелательных изменений?Transaction.Commit сохраняет изменения, внесенные до BeginTransaction

var a = session.Load<A>(id); 
a.Value = ParseExpressions(a.Value); 

using(var tx = session.BeginTransaction()) 
{ 
    // Do some work here 
    tx.Commit(); 
} 

A объект содержит выражения, которые должны быть оценены, прежде чем работа может быть сделано, но, когда сделка совершается a.Value сохраняется в базе данных.

Я хочу только изменения, которые происходят после session.BeginTransaction() для сохранения.

Я попытался позвонить session.Clear(), но это приведет к сохранению объектов с идентификатором Guid вместо обновленного.

Любая помощь очень ценится.

ответ

0

Не уверен, что на 100% я правильно помню, но вы должны иметь возможность устанавливать session.FlushMode никогда и явно сохранять изменения, которые вы хотите сохранить.

+0

Это будет только задерживать флеш, а не выбирать изменения –

0

Вы можете использовать систему событий, чтобы пропустить сохранение определенных объектов, но у вас возникают проблемы.

Вы также можете указать Evict() конкретных объектов из сеанса.

Правило большого пальца: если вы не хотите сохранять изменения для объекта, не изменяйте объект. Все ваши изменения должны быть готовы, когда вы вызываете commit.

Смежные вопросы