首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架5 DbContext和连接

实体框架5 DbContext和连接
EN

Stack Overflow用户
提问于 2016-07-29 19:46:07
回答 2查看 41关注 0票数 1

实体框架是否在创建新的DbContext实例时创建到数据库的新连接?

EN

回答 2

Stack Overflow用户

发布于 2016-07-29 20:00:31

同意DavidG,No它不会在这一点上创建连接。

仅当调用SaveChanges()为时,才保持连接

entities所做的任何更改,无论是对updates, inserts or deletes所做的更改,都只在调用DbContext.SaveChanges()方法时持久保存到数据库中。如果在调用DbContext实例的SaveChanges()方法之前将其释放,则通过此DbContext完成的任何inserts, updates or deletes都不会持久化到数据存储中。

票数 1
EN

Stack Overflow用户

发布于 2016-07-29 20:11:32

因此,以下面的代码为例:

代码语言:javascript
复制
var context = new MyContext();
var cars = context.Cars.Where(c => c.TopSpeed > 100);
var carList = cars.ToList(); //Connection will probably happen here

在哪里发起连接?实际上有两种可能性。通常,只会在最后一行上创建连接。实例化上下文没有任何副作用,中间一行使用的是延迟执行,所以还不需要连接。

但是,您可能会发现第二行将导致创建一个连接,这将发生在您的应用程序第一次启动并且Entity Framework需要去确认您的数据库与它认为的应该是什么时。您可以通过禁用初始化程序来禁用它,例如:

代码语言:javascript
复制
Database.SetInitializer<MyContext>(null);

写到数据库怎么样?您也会遇到类似的情况,但这一次唯一需要连接的时候是调用SaveChanges

代码语言:javascript
复制
var context = new MyContext();
var ferarri = new Car { Name = "Ferarri", TopSpeed = 170 };
context.Cars.Add(ferarri);
context.SaveChanges(); //Connection will probably happen here

就这些吗?嗯,不,当你开始一个事务时,你也会得到一个新的连接:

代码语言:javascript
复制
//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();        
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38658017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档