0

NHibernateを使用してC#アプリケーションを作成し、Database Design Studio Liteで作成され、SQL ServerManagementStudioで管理されているSQLServerデータベースを選択して挿入しました。

私の問題は、アプリケーションを複数のワークステーションで実行している場合、データベースは「スレッドセーフ」ではないため、複数のトランザクションに対して安全ではなく、問題の名前がわからないことです。

データベースを複数のトランザクションから安全にする最も簡単な方法は何ですか?「アクセス制限」をSINGLE_USERモードに設定しようとしましたが、データベースを接続する最初のアプリケーションにロックし、他のすべてのアプリケーションを失敗させます。

SQL Server Management Studioからは、テーブルのみを作成します。データベースを選択、挿入、更新しません。これはすべて、アプリケーションから実行されます。

私が提供したこれらの情報が私を助けるのに十分であることを願っています。それ以外の場合は、もう少し投稿します:)

編集

NHibernateがSessionFactoryを使用しているため、すべてのトランザクションが安全であることがわかりました:)

4

1 に答える 1

0

レコードのクエリ、追加、および変更時に実際のトランザクションを使用していますか?

using (var session = SessionFactory.OpenSession())
using (var tx = session.BeginTransaction())
{
   // query or submit changes to session here, calling tx.Commit() at the end if you make changes
}

デフォルトの分離はコミットされた読み取りに制限する必要があるため、クエリはまだ完全にコミットされていない変更を返すべきではありません。

于 2012-05-21T09:21:59.780 に答える