2016-07-29 2 views

답변

1

DavidG와 동의하면 아니요이 시점에서 연결을 만들지 않습니다.

연결 만 SaveChanges를()가 그 updates, inserts or deletes 수, 당신의 entities로 만든

변경을 호출 할 때 지속되는 DbContext.SaveChanges() 메서드를 호출 할 경우에만 데이터베이스에 유지됩니다. SaveChanges() 메서드가 호출되기 전에 DbContext 인스턴스가 처리되면이 DbContext을 통해 수행 된 inserts, updates or deletes 중 아무 것도 데이터 저장소에 저장되지 않습니다.

+0

이를 전적으로 사실이 아니에요, 잠시 후에 답변을 추가하겠습니다 ... – 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 

이 경우 연결이 시작된다? 사실 두 가지 가능성이 있습니다. 일반적으로 마지막 줄에는 연결 만 생성됩니다. 컨텍스트를 인스턴스화하는 데 부작용이없고 중간 선이 지연 실행을 사용하므로 아직 연결이 필요하지 않습니다.

그러나 두 번째 줄은 연결이 생성되도록합니다. 이것은 앱이 처음으로 돌아가고 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();   
} 
관련 문제