2009-06-01 4 views
6

nhibernateを使用して、コミットされていない読み取りにトランザクションレベルを設定するにはどうすればよいですか?nHibernateを使用すると、コミットされていないものをどのように読み取ることができますか?

SQLでは、通常、ストアドプロシージャの開始時にトランザクションレベルを設定したり、インライン(NOLOCK)を使用します。

+0

あなたがしていることは何でも、コミットされていない読書は本当にトラブルを求めています。私はこれを使う本当の理由は見たことがありません。トランザクション分離を実際に無効にしているアプリケーションは、トランザクションを適切に使用していません。 –

+1

それはdbaの神話のビットです。それはデザインの選択であり、すべてのデザインの選択肢は、操作するドメインに基づいている必要があります。基本的な小規模から中規模のWebプロジェクトおよびクライアントアプリケーション(圧倒的多数の民族の作業場所です)では、おそらく適切なことです。その決定はコスト対リスクです。リアルタイム環境では、ダーティリードでトランザクションレスを実行する環境はほぼ標準です。 ebayのような巨大なeコマースサイトはRTアプリケーションと多くの設計上の決定を共有します。ロールバックのコストはあなたを傷つけるでしょう。 – Vman

+0

Martin Fowlerがここにコメントしました: http://martinfowler.com/bliki/Transactionless.html – Vman

答えて

3

次の手順を使用してNHibernateのでnolockのインラインSQLを使用することができます。

  1. はNHibernateのセッションを作成しながら、

    <sql-query name="PersonList"> 
    return alias="person" class="Person"> 
    SELECT * FROM Person WITH(nolock) 
    <sql-query> 
    
  2. 使用AddXmlFile(hbm file path)次でファイルHBMを作成します。

  3. DBSession.GetNamedQuery("PersonList")を使用してください。

0

これは、RDBMSのdirecltyに話を

IDbCommand NHCommand; 

    NHCommand= NHSession.Connection.CreateCommand(); 

    NHCommand.CommandText= "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"; 

    NHCommand.ExecuteNonQuery(); 

種類(SQL Server固有の)私のために働きました。