2016-03-27 27 views
1

私は、C#でEntity Frameworkを使用してトランザクションを使用してデータを保存するシナリオを考え出しました。コミットされていない間、テーブルはロックされます。私は以下のコードを使ってデータを保存しています。トランザクションがEntity Frameworkでコミットされていない間にテーブルがロックされますか?

tblCharge obj = new tblCharge(); 
obj.Plan = "DD"; 
obj.TotalAmount = 1500; 

// Opening transaction 
using (System.Data.Common.DbTransaction transaction((IObjectContextAdapter)dbContext).ObjectContext.Connection.BeginTransaction()) 
{ 
    dbContext.tblCharges.Add(obj); 
    dbContext.SaveChanges(); 
    transaction.Commit(); 
} 

コミット前にデータを保存していて、SQL Serverのテーブルから選択クエリを実行すると、トランザクションがコミットされるまで結果が表示されません。

トランザクションの使用中にテーブルロックが発生しない方法はありますか?

+0

**テーブルロックではありません - 挿入している行のみがロックされています。残りのテーブルはまだ選択可能です。問題ありません。このロック動作は**目的**のためであり、正当な理由のために - それを回避しようとしないでください! –

+0

あなたの助けてくれてありがとう –

答えて

1

リレーショナルデータベース内のトランザクションの全ポイントは、トランザクションがコミットされるまで、データベースに対して実行される変更を他のトランザクションから見えないようにすることです。あなたの質問に答えるために、トランザクションがコミットされる前に他のクエリに結果を表示させることはできません。これは、トランザクションの主な定義に違反するためです。

+0

しかし、他のすべてのデータが選択可能でなければなりません。とにかくそれをすることはありますか? –

+0

@ AlinaDilshad:データ** IS **を選択可能 - トランザクションがコミットするとすぐ**データは実際に良好に保存されます。コミットの前に、データは実際にデータベースにはまだありません。だから、コミットの前にそれを選択したくないはずです! –

関連する問題