C# NHibernate事务中的本机SQL查询

C# NHibernate事务中的本机SQL查询,c#,sql,nhibernate,transactionscope,C#,Sql,Nhibernate,Transactionscope,又短又甜: 在我的应用程序中进行任何本机SQL查询之前,我是否应该总是刷新会话范围 我猜答案是肯定的,因为NHibernate实现了缓存,所以可能所做的更改仍然不在数据库中,因此查询将得到不一致的结果 如何在NHibernate中当前活动事务的同一事务中进行这些查询 这很重要,因为我的业务逻辑可能会出现死锁 关于这两个问题的进一步文档也将不胜感激 (我假设通过“刷新”您指的是ISession.Flush()): 快速回答是:这取决于刷新模式,如果从来没有刷新过,则必须自己刷新会话,但如果是自

又短又甜:

  • 在我的应用程序中进行任何本机SQL查询之前,我是否应该总是刷新会话范围

    我猜答案是肯定的,因为NHibernate实现了缓存,所以可能所做的更改仍然不在数据库中,因此查询将得到不一致的结果

  • 如何在NHibernate中当前活动事务的同一事务中进行这些查询

    这很重要,因为我的业务逻辑可能会出现死锁

  • 关于这两个问题的进一步文档也将不胜感激

    (我假设通过“刷新”您指的是
    ISession.Flush()
    ):

  • 快速回答是:这取决于刷新模式,如果从来没有刷新过,则必须自己刷新会话,但如果是自动刷新,则NHibernate将在发出查询之前刷新
  • 使用NHibernate执行本机SQL查询有两种方法。一种是使用NHibernate自己的原生SQL支持,比如使用命名查询或
    ISession.CreateSQLQuery()
    。另一种方法是使用NHibernate
    ITransaction.inclist()
    。但是,我不确定使用
    inclist()
    执行DbCommand是否会刷新会话
  • (我假设“Flush”指的是
    ISession.Flush()
    ):

  • 快速回答是:这取决于刷新模式,如果从来没有刷新过,则必须自己刷新会话,但如果是自动刷新,则NHibernate将在发出查询之前刷新
  • 使用NHibernate执行本机SQL查询有两种方法。一种是使用NHibernate自己的原生SQL支持,比如使用命名查询或
    ISession.CreateSQLQuery()
    。另一种方法是使用NHibernate
    ITransaction.inclist()
    。但是,我不确定使用
    inclist()
    执行DbCommand是否会刷新会话

  • 这应该回答你的问题这应该回答你的问题