Создает ли Entity Framework новое соединение с базой данных при создании нового экземпляра DbContext
?Entity Framework 5 DbContext and Connections
ответ
Согласен с DavidG, No Это не создает соединение в этой точке.
Подключение только сохраняется, когда SaveChanges() называется
Любые изменения, сделанные в вашей entities
, будь то updates, inserts or deletes
, только сохраняется в базе данных, когда метод DbContext.SaveChanges()
называется. Если экземпляр DbContext
расположен до его вызова SaveChanges()
, ни один из inserts, updates or deletes
, выполненный через этот DbContext
, не будет сохранен в хранилище данных.
Так возьмите этот код в качестве примера:
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();
}
Это может помогает .. [DbContext] (http://mehdi.me/ambient-dbcontext-in-ef6/) –