实体框架5 DbContext和Connections

时间:2016-07-29 11:46:07

标签: entity-framework dbcontext

Entity Framework是否在创建DbContext的新实例时创建了与数据库的新连接?

2 个答案:

答案 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();        
}