Как удалить объект, не извлекая его сначала из 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() есть перегруженный метод, где он принимает строку, которая определяет запрос удаления