2010-02-23 68 views
3

我们在服务器端使用NHibernate作为我们的ORM。如何在NHibernate中有效地使用ID删除对象?

有时,需要从数据库中删除一个对象,只给出该对象的类型和ID。另外,被删除的对象之前没有被提取(所以它不在会话缓存中或其他)。

无论如何,我正在使用ISession.Delete(query)过载,其中查询与from Dummy where Id=5一样普通。

我的问题是为什么NHibernate删除它之前获取对象?据我所知,我付出了双倍往返服务器的手术费用,直观上应该只需一次往返。

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

回答

6

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

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

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

1

如果你打电话ISession.Delete(Session.Load(type, id));,它真的打到分贝,因为Load()应该返回一个代理,而不是打数据库?

+1

是的,我的猜测是删除函数必须以触发加载的方式访问代理。 – dotjoe 2010-02-23 22:19:11

+0

和懒加载? – 2010-02-23 22:44:22

+0

我至少可以确认,如果延迟加载关闭,Load仍然首先执行SELECT。我还没有试图打开延迟加载类,但看看是否有帮助... – 2011-01-05 22:05:34

相关问题