实体框架是否在创建新的DbContext实例时创建到数据库的新连接?
发布于 2016-07-29 20:00:31
同意DavidG,No它不会在这一点上创建连接。
仅当调用SaveChanges()为时,才保持连接
对entities所做的任何更改,无论是对updates, inserts or deletes所做的更改,都只在调用DbContext.SaveChanges()方法时持久保存到数据库中。如果在调用DbContext实例的SaveChanges()方法之前将其释放,则通过此DbContext完成的任何inserts, updates or deletes都不会持久化到数据存储中。
发布于 2016-07-29 20:11:32
因此,以下面的代码为例:
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();
}https://stackoverflow.com/questions/38658017
复制相似问题