使用nHibernate,如何阅读未限制的内容?

使用nHibernate,如何阅读未限制的内容?,nhibernate,Nhibernate,使用nhibernate,如何将事务级别设置为读取未提交 使用SQL,我通常在存储过程开始时设置事务级别,或者使用内联(NOLOCK)。您可以通过hibernate.connection.isolation进行设置。如果您需要更精确的控制,请查看NHibernate的机制。您可以通过以下步骤将nolock与NHibernate联机使用SQLs: 使用以下命令创建HBM文件 <sql-query name="PersonList"> return alias="person" cla

使用nhibernate,如何将事务级别设置为读取未提交


使用SQL,我通常在存储过程开始时设置事务级别,或者使用内联(NOLOCK)。

您可以通过
hibernate.connection.isolation
进行设置。如果您需要更精确的控制,请查看NHibernate的机制。

您可以通过以下步骤将
nolock
与NHibernate联机使用SQLs:

  • 使用以下命令创建HBM文件

    <sql-query name="PersonList">
    return alias="person"  class="Person">
    SELECT * FROM Person WITH(nolock) 
    <sql-query>
    
    
    return alias=“person”class=“person”>
    从具有(nolock)的人员中选择*
    
  • 创建nhibernate会话时使用
    AddXmlFile(hbm文件路径)

  • 使用
    DBSession.GetNamedQuery(“PersonList”)
    获取人员列表

  • 这对我很有用(特定于SQL server)


    与RDBMS直接对话。

    无论你在做什么,read uncommitted都是在自找麻烦。我从来没见过使用这个的真正理由。实际上禁用事务隔离的应用程序没有正确使用事务。这有点像dba神话。这是一种设计选择,就像所有的设计选择一样,应该基于您所经营的领域。对于基本的中小型网络项目和客户端应用程序(我想这是绝大多数民间工作的地方),这可能是正确的做法。决策是成本与风险,在实时环境中,运行无事务脏读几乎是常态。大型电子商务网站(如ebay)也将与RT应用分享许多设计决策,交易水平如此之高,使用它们的风险太大。回滚的代价将使您瘫痪。Martin Fowler在这里对此发表了评论:这是我使用SQL拦截器的解决方案。
      IDbCommand NHCommand;
    
      NHCommand= NHSession.Connection.CreateCommand();
    
      NHCommand.CommandText= "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED";
    
      NHCommand.ExecuteNonQuery();