Как эффективно удалять объекты по их идентификатору в NHibernate? - PullRequest
3 голосов
/ 23 февраля 2010

Мы используем NHibernate в качестве нашего ORM на стороне сервера.

Иногда возникает необходимость удалить объект из базы данных, учитывая только тип и идентификатор этого объекта. Кроме того, удаленный объект не был извлечен ранее (поэтому он не находится в кэше сеанса или где-либо еще).

В любом случае, я использую перегрузку ISession.Delete(query), где запрос столь же тривиален, как и from Dummy where Id=5.

Мой вопрос: почему NHibernate выбирает объект перед его удалением? Насколько я вижу, я плачу за двойную поездку в оба конца на сервер за операцию, которая интуитивно должна занять всего одну поездку в обе стороны.

Есть ли способ удалить объект из базы данных по его типу и идентификатору с помощью NHibernate, чтобы это заняло всего одну обратную передачу?

Ответы [ 2 ]

6 голосов
/ 24 февраля 2010

Вы также можете использовать HQL, чтобы удалить его самостоятельно.

session.CreateQuery("delete from Table where id = :id")
     .SetParameter("id", id)
     .ExecuteUpdate();

Но это не приведет к каскадному удалению, и я полагаю, что это одна из причин, по которой он должен загружаться первым.

1 голос
/ 24 февраля 2010

Действительно ли это ударяет по БД, если вы вызываете ISession.Delete(Session.Load(type, id));, поскольку Load () должна вернуть прокси, а не поразить БД?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...