2016-11-26 4 views
0

私はオンラインストア用にASP.NET MVCとEntity Framework 6を​​使用しています。Entity Frameworkのロックテーブルの無効化/防止

vmProduct.product.seenCount = Convert.ToInt32(vmProduct.product.seenCount) + 1; 

db.SaveChanges(); 

と製品ページソートseenCount列でリストのリストに:私はこのコードで私の製品ページの最初の行で、ビューの数を節約しています。

しかし、私のサイトは、多くの要求がある場合、製品のテーブルがあるため、製品およびその他のクエリに数を追加するロックは、私のサイトは、いくつかの分ロードされないので、SQL Serverで待機することになり、私は、コードをコメントしている場合、私の問題は解決します。

カウントを追加する際にロックを解除する方法はありますか?またはここでの解決策は何ですか?並行性を向上させる

+0

**いくつかの更新が行われているため、**テーブル**はロックされません。SQL Serverは、特定のトランザクションにアクティブロックが5000を超えない限り**行レベルのロック**を使用します。 .... –

答えて

0

一つのアプローチは、SQL Serverが代わりREAD COMMITTED分離レベルで整合性を提供するために、ロックの列のバージョンを使用するようにREAD_COMMITTED_SNAPSHOTデータベース・オプションを有効にすることです。行のバージョニングは並行性を向上させますが、追加のtempdb使用量(行バージョンストアの場合)とデータベーススペース(行バージョンの場合は1行あたり14バイト)を必要とします。 https://technet.microsoft.com/en-us/library/ms188277.aspxを参照してください。

最新のソート済み製品リストを取得するたびにデータベースにアクセスするのではなく、データをキャッシュし、定期的にバックグラウンドでリストを更新することを検討してください。これにより、データベースとアプリケーションの両方のパフォーマンスが大幅に向上します。

+0

あなたの答えをありがとう、私は 'READ_COMMITTED_SNAPSHOT'を数時間後にテストし、ここで結果を共有します。 –

関連する問題