如何在NHibernate中有效地删除ID对象?

时间:2010-02-23 20:03:17

标签: nhibernate

我们在服务器端使用NHibernate作为我们的ORM。

有时,只需要提供该对象的类型和ID,就需要从数据库中删除对象。此外,之前未获取已删除的对象(因此它不在会话缓存中或其他任何位置)。

无论如何,我使用ISession.Delete(query)重载,其中查询与from Dummy where Id=5一样简单。

我的问题是为什么NHibernate在删除之前获取对象?据我所知,我正在支付服务器的双倍往返费用,直观地应该只需要一次往返。

有没有办法通过NHibernate的类型和ID从数据库中删除对象,这样只需要一次往返?

2 个答案:

答案 0 :(得分:6)

您也可以使用HQL自行删除它。

session.CreateQuery("delete from Table where id = :id")
     .SetParameter("id", id)
     .ExecuteUpdate();

但这不会级联删除,我认为这是首先需要加载的一个原因。

答案 1 :(得分:1)

如果你调用ISession.Delete(Session.Load(type, id));,它真的会命中db,因为Load()应该返回一个代理而不是命中db吗?