Как я удаляю объект, не выбирая его от дб сначала?
В другом ORM я могу сделать это:
session.Delete<User>(1); // 1 = PK
Добавьте в свой проект следующий класс:
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 user = new User();
user.Id = 1;
session.Delete(user);
Попробуйте следующее:
var user = session.Load<User>(1);
session.Delete(user);
Load
создаст прокси для объекта User с установленным идентификатором. Я не уверен, загрузит ли Delete
объект из базы данных перед его удалением, и в данный момент я не могу его протестировать.
Проверьте метод ExecuteUpdate для объекта IQuery.
IQuery q = session.CreateQuery ("delete from User where Id = 1");
q.ExecuteUpdate();
Следует удалить объект, не извлекая его afaik.
до версии 2 не было способа.
После версии 2 у вас есть метод ExecuteUpdate()
на IQuery
и есть перегруженный метод на ISession.Delete()
, где он принимает строку, определяющую запрос на удаление