Как удалить объект с помощью PK в nhibernate?

Как удалить объект, не извлекая его сначала из db?

В другом ORM я могу это сделать:

session.Delete<User>(1); // 1 = PK

Ответ 1

Добавьте в свой проект следующий класс:

public static class SessionHelper
{
    public static void Delete<TEntity>(this ISession session, object id)
    {
        var queryString = string.Format("delete {0} where id = :id",
                                        typeof(TEntity));
        session.CreateQuery(queryString)
               .SetParameter("id", id)
               .ExecuteUpdate();
    }
}

Теперь вы можете использовать session.Delete<User>(1).

Ответ 2

Вы можете сделать это

User user = new User();
user.Id = 1;
session.Delete(user);

Ответ 3

Попробуйте следующее:

var user = session.Load<User>(1);
session.Delete(user);

Load создаст прокси для объекта User с набором идентификаторов. Я не уверен, что Delete будет загружать объект из базы данных, прежде чем удалять его, и я не могу проверить его на данный момент.

Ответ 4

Проверьте метод ExecuteUpdate на объекте IQuery.

IQuery q = session.CreateQuery ("delete from User where Id = 1");
q.ExecuteUpdate();

Следует удалить объект, не извлекая его afaik.

Ответ 5

до версии 2 не было никакого способа. После ver 2 у вас есть метод ExecuteUpdate() на IQuery и на ISession.Delete() есть перегруженный метод, где он принимает строку, которая определяет запрос удаления