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

Как я удаляю объект, не выбирая его от дб сначала?

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

session.Delete<User>(1); // 1 = PK
14
задан Brian Tompsett - 汤莱恩 6 July 2015 в 20:40
поделиться

5 ответов

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

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

28
ответ дан 1 December 2019 в 06:53
поделиться

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

User user = new User();
user.Id = 1;
session.Delete(user);
7
ответ дан 1 December 2019 в 06:53
поделиться

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

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

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

4
ответ дан 1 December 2019 в 06:53
поделиться

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

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

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

2
ответ дан 1 December 2019 в 06:53
поделиться

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

0
ответ дан 1 December 2019 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: