我们在服务器端使用NHibernate作为我们的ORM。
有时,只需要提供该对象的类型和ID,就需要从数据库中删除对象。此外,之前未获取已删除的对象(因此它不在会话缓存中或其他任何位置)。
无论如何,我使用ISession.Delete(query)
重载,其中查询与from Dummy where Id=5
一样简单。
我的问题是为什么NHibernate在删除之前获取对象?据我所知,我正在支付服务器的双倍往返费用,直观地应该只需要一次往返。
有没有办法通过NHibernate的类型和ID从数据库中删除对象,这样只需要一次往返?
答案 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吗?