1

テストプロジェクトにsqllitedbを使用しています。

トランザクション内でIsolationLevelを使用している場合、すべてが完璧に実行されます

using (ITransaction transaction = session.BeginTransaction(IsolationLevel.ReadCommitted))

しかし、トランザクション内にハードコーディングしたくないのでIsolationLevel.ReadCommitted、接続文字列内に入れたいので、これを試しました

<add name="ConnectionString" connectionString="Data Source=...;ISOLATION LEVEL=IsolationLevel.ReadCommitted"/>

しかし、エラーはメッセージに残ります"The database is locked !"

4

2 に答える 2

2

このための接続文字列オプションはありません ( MSDNを参照してください)。トランザクションで if を指定するか (最初の例に従って)、SET TRANSACTION ISOLATION LEVEL接続を開いた後にステートメントを発行します。補足的な観察として、プールから再利用される接続の分離レベルはリセットされないことに注意してください。これは私を夢中にさせます...したがって、おそらく分離レベルを明示的に設定して、それが期待どおりであることを確認し、基礎となる接続で使用された最後のコマンド( new の場合でもSqlConnection)が使用していたものだけではありません。

于 2012-08-20T08:36:24.443 に答える
0

追加しませんか

<add key="hibernate.connection.isolation" value="ReadCommitted" />

nhibernate構成セクションで?

于 2012-08-21T19:20:39.440 に答える