2016-07-29 4 views

ответ

1

Согласен с DavidG, No Это не создает соединение в этой точке.

Подключение только сохраняется, когда SaveChanges() называется

Любые изменения, сделанные в вашей entities, будь то updates, inserts or deletes, только сохраняется в базе данных, когда метод DbContext.SaveChanges() называется. Если экземпляр DbContext расположен до его вызова SaveChanges(), ни один из inserts, updates or deletes, выполненный через этот DbContext, не будет сохранен в хранилище данных.

+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();   
} 
Смежные вопросы