C# 使用NHibernate HQL时是否需要显式刷新
在C# 使用NHibernate HQL时是否需要显式刷新,c#,nhibernate,C#,Nhibernate,在NHibernate会话中,我们是否需要在执行HQL语句之前调用Flush() 我相信无论何时处理HQL,NHibernate都应该足够聪明,可以刷新 比如说, using (ISession session) { var query = session.CreateQuery( $"DELETE FROM Table WHERE id = :id") .SetPar
NHibernate
会话中,我们是否需要在执行HQL
语句之前调用Flush()
我相信无论何时处理HQL,NHibernate都应该足够聪明,可以刷新
比如说,
using (ISession session)
{
var query = session.CreateQuery(
$"DELETE FROM Table WHERE id = :id")
.SetParameter("id", someId);
session.Flush(); //is this necessary?
query.ExecuteUpdate();
session.Clear(); //is this necessary?
}
在读取数据时,如果您的
FlushMode
设置为Auto
,这是默认设置,那么NH将努力管理刷新,以便查询结果与会话中当前的一致
然而,当涉及到添加、更新和删除时,显式是很重要的。以下代码是规范示例:
using (ISession session)
using (var transaction = session.BeginTransaction())
{
var query = session.CreateQuery(
$"DELETE FROM Table WHERE id = :id")
.SetParameter("id", someId);
query.ExecuteUpdate();
transaction.Commit();
}
提交事务会在提供数据库一致性的同时为您处理刷新
我必须警告这个答案,我很少使用HQL,因此我的答案可能缺少与HQL及其行为特别相关的内容。当涉及到读取数据时,如果您的
FlushMode
设置为Auto
,这是默认设置,然后NH将努力管理刷新,以便查询结果与会话中当前的结果一致
然而,当涉及到添加、更新和删除时,显式是很重要的。以下代码是规范示例:
using (ISession session)
using (var transaction = session.BeginTransaction())
{
var query = session.CreateQuery(
$"DELETE FROM Table WHERE id = :id")
.SetParameter("id", someId);
query.ExecuteUpdate();
transaction.Commit();
}
提交事务会在提供数据库一致性的同时为您处理刷新
我必须警告这个答案,我很少使用HQL,所以我的答案可能遗漏了一些与HQL及其行为特别相关的东西