Hi, Alexander was surely willing to mean s.Delete() is equivalent to: foreach(var e in s.CreateQuery("from Entity e").List()) s.Delete(e);
So here we have at least two queries, one loading all matching entities into memory, the other batching the deletes together (assuming batching is enabled and batch size is big enough to accommodate all deletes). Delegating the implementation to CreateQuery("delete from Entity e").ExecuteUpdate(); instead will not be equivalent not only due to cascade delete which will not be handled unless set on database foreign keys too, but also because it will not benefit of the batch ordering feature which takes care of deleting according to foreign key constraints values. In tests, I tend to favor CreateQuery("delete from Entity e").ExecuteUpdate() over s.Delete("from Entity e"), but I have seen many times the former failing due to foreign key constraints (especially with auto-join cases), while the later was succeeding thanks to batch ordering. So changing its implementation can be a serious breaking change. I would be more in favor of rewording a bit its xml documentation for making it more obvious that it loads all entities to delete in memory. Currently, this is: Delete all objects returned by the query. It could be changed to: Load all objects returned by the query then delete them. -- --- You received this message because you are subscribed to the Google Groups "nhibernate-development" group. To unsubscribe from this group and stop receiving emails from it, send an email to nhibernate-development+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.