2010-05-17 2 views
18

В тесте, где я хочу сохранить объект, а затем докажу, что он был сохранен, извлекая его из db (а не сеанса), я не вижу разницы между следующим:NHibernate Session.Flush & Evict vs Clear

// save it 
session.Clear() 
// fetch it 

или

// save it 
session.Flush() 
session.Evict(_instance) 
// fetch it 

ленивый программист мне наклоняется к одной линии через два. Есть ли какая-то причина, по которой мне не хватает двух линий?

ответ

23

session.Clear фактически отменяет все ожидающие сохранения/обновления/etc.

Если это не так, это потому, что вы используете личность, чтобы сущность сохранялась без промывки.

+1

I * am * используя личность - это прекрасная причина для поддержки флеша и выселения! Cheers – Berryl

+1

Btw, не будет session.Flush & session.Clear получить тот же эффект, что и Flush & Evict? Я считаю, что это еще лучше, так как Evict не будет каскадом, если не будет определен так. – Rita

+0

@Rita. Да, я думаю, вы правы в этом. Один из ключей, чтобы понять, что сказал Диего, заключается в том, что Clear отменяет * ожидающий * сохраняет. То, что я обычно делаю в наши дни, это обернуть все внутри tranaction; поэтому Save находится внутри отдельного tx и передается через tx.Commit до того, как я вызову Session.Clear() и поэтому не ожидаю. НТН – Berryl

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