Как удалить объект с помощью PK в nhibernate? - PullRequest
14 голосов
/ 17 июня 2010

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

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

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

Ответы [ 5 ]

28 голосов
/ 17 июня 2010

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

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).

7 голосов
/ 17 июня 2010

Вы могли бы сделать это

User user = new User();
user.Id = 1;
session.Delete(user);
4 голосов
/ 17 июня 2010

Попробуйте это:

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

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

1 голос
/ 17 июня 2010

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

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

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

0 голосов
/ 18 июня 2010

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

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