2013-05-15 2 views
0

Я нашел этот кусок кода:Session выселить и слейте для обновления объекта

public virtual void Update(T entity) { 
     Logger.Debug("Update {0}", entity); 
     Session.Evict(entity); 
     Session.Merge(entity); 
    } 

Можете ли вы объяснить, что плюсы и минусы вызова этого более вызова обновления на сессии? Почему это работает, что такое механика за этим кодом? Разве это не слишком хаки?

+0

Любая причина, почему вы не просто призывающую 'Update' на предприятие? – rae1

+0

Да, конечно, может возникнуть вопрос, почему бы просто не называть обновление? это фрагмент внешнего фреймворка. – 0lukasz0

ответ

0

Session.Evict будет выселяет один объект из сеанса, для образца, если у вас уже есть obj на сессии, и вы пытаетесь вызвать session.Update(entity) вы получите исключение, говоря, что это obj на сессии, и вы не можете обновить.

Session.Merge объединит один объект с существующим объектом в сеансе (кеше) и обновит.

посмотрите: https://stackoverflow.com/a/9161057/316799

+0

Но почему 'merge()'? Почему не следует выселение путем прямого обновления? Будет ли обновление помещать сущность не в сеанс? – djmj

+0

После выселения с прямым обновлением все равно будет выведено «NonUniqueObjectException». Как указано в документации, переданный экземпляр удаляется не объектом с идентификатором и типом. – djmj

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

  • Нет связанных вопросов^_^