Entity Framework是否在创建DbContext
的新实例时创建了与数据库的新连接?
答案 0 :(得分:1)
同意DavidG,否它不会在此时创建连接。
只有在调用SaveChanges()时才会保持连接
对entities
所做的任何更改,无论是updates, inserts or deletes
,只有在调用DbContext.SaveChanges()
方法时才会保留到数据库。如果在调用DbContext
方法之前处置SaveChanges()
实例,则通过此inserts, updates or deletes
完成的DbContext
都不会保留到数据存储中。
答案 1 :(得分: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();
}