如何在nhibernate中使用PK删除对象?

时间:2010-06-17 16:55:08

标签: nhibernate

如何在不首先从数据库中提取对象的情况下删除对象?

在另一个ORM中,我可以这样做:

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

5 个答案:

答案 0 :(得分:28)

将以下类添加到项目中:

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)

答案 1 :(得分:7)

你可以这样做

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

答案 2 :(得分:3)

试试这个:

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

Load将为具有标识符集的User对象创建代理。我不确定Delete是否会在删除之前从数据库加载对象,我现在无法测试它。

答案 3 :(得分:2)

查看IQuery对象上的ExecuteUpdate方法。

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

应删除对象而不将其取回。

答案 4 :(得分:0)

在第2版之前,没有办法。 在第2版之后,您在ExecuteUpdate()上有IQuery方法,ISession.Delete()上有一个重载方法,它接受一个定义删除查询的字符串