2016-07-29 16 views
1

Entity Frameworkは、DbContextの新しいインスタンスを作成すると、データベースへの新しい接続を作成しますか?Entity Framework 5 DbContextと接続

+1

をこの5月に役立ちます.. [DbContext](http://mehdi.me/ambient-dbcontext-in-ef6/) –

答えて

1

DavidGと同意すると、いいえその時点で接続は作成されません。

接続のみ、のSaveChanges()はそれupdates, inserts or deletesことが、あなたのentitiesに行わ

変更を呼ばれたときに永続化されDbContext.SaveChanges()メソッドが呼び出されたときにのみデータベースに永続化されています。 DbContextインスタンスが、SaveChanges()メソッドが呼び出される前に破棄された場合、このDbContextで実行されたinserts, updates or deletesは、データストアに永続化されません。

+0

これを完全に真実ではない、私は1分で答えを追加します... – DavidG

+0

素晴らしいでしょう..! –

+0

うまくいけばそれは役に立ちます:) – DavidG

1

だから、例として、このコードを取る:

接続が開始され
var context = new MyContext(); 
var cars = context.Cars.Where(c => c.TopSpeed > 100); 
var carList = cars.ToList(); //Connection will probably happen here 

?実際には2つの可能性があります。通常、最後の行には接続が作成されます。コンテキストのインスタンス化には副作用がなく、中間の行は遅延実行を使用しているため、まだ接続は必要ありません。

しかし、2行目で接続が作成されることがあります。これは、アプリが初めてスピンアップしてEntity Frameworkを起動し、データベースが必要と考えるものと一致する必要がある場合に発生しますさあ。これを無効にするには、次のようにイニシャライザを無効にします。

Database.SetInitializer<MyContext>(null); 

データベースへの書き込みはどうですか?さて、あなたは起こって似た何かを持っていますが、SaveChangesを呼び出すときに、この時間は、接続が必要とされている唯一の時間は次のとおりです。

var context = new MyContext(); 
var ferarri = new Car { Name = "Ferarri", TopSpeed = 170 }; 
context.Cars.Add(ferarri); 
context.SaveChanges(); //Connection will probably happen here 

は、すべてのことですか?あなたが取引を開始する際によくありません、あなたはまた、新しい接続を取得します:

//Database connection will be opened here 
using (var transaction = context.Database.BeginTransaction()) 
{ 
    var cars = context.Cars.Where(c => c.TopSpeed > 100); 
    var carList = cars.ToList();   
} 
関連する問題