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

jga*_*fin 14 nhibernate

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

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

session.Delete<User>(1); // 1 = PK
Run Code Online (Sandbox Code Playgroud)

Die*_*hon 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

你现在可以使用了session.Delete<User>(1).

  • 如果我的主键列的名称与"id"不同,这也可以吗? (2认同)
  • @A_J 是的。`id` 是一个特殊的名称,代表实体的 id。请参阅http://nhibernate.info/doc/nhibernate-reference/queryhql.html#queryhql-where。 (2认同)
  • @HristoYankov这是一个额外的,不必要的查询 (2认同)
  • @HristoYankov FirstOrDefault 执行查询。但是 NHibernate 5 确实提供了一种使用 LINQ 扩展一次性删除的方法。请参阅 http://nhibernate.info/doc/nhibernate-reference/querylinq.html#querylinq-modifying-delete (2认同)

Cla*_*edi 7

你可以做到这一点

User user = new User();
user.Id = 1;
session.Delete(user);
Run Code Online (Sandbox Code Playgroud)