我必须在实体框架 6 中为 DbContext 使用“使用”块吗

Posted

技术标签:

【中文标题】我必须在实体框架 6 中为 DbContext 使用“使用”块吗【英文标题】:Must I use "Using" block in Entity Framework 6 for DbContext 【发布时间】:2018-12-18 02:20:59 【问题描述】:

这个问题不是关于 c# 的一般“使用”,而不是关于何时/为什么使用它等。

问题是,DBContext 对象是否自己处理连接,因此我不需要使用using 来处理它,没有问题所以不要将其标记为重复

using (DBContext db = new DBContext())

    var Order =  db.Order.First(r => r.OrderID == 6);
    Order.Type = 6;
    db.SaveChanges();

或者不使用

DBContext db = new DBContext();
var Order =  db.Order.First(r => r.OrderID == 6);
Order.Type = 6;
db.SaveChanges();

因为我在this source 中看到using 不是必需的,最好不要使用它。

Entity Framework 会为我处理连接吗?

【问题讨论】:

使用的影响之一是当您处理急切加载和延迟加载时。查看此答案的最后一部分以获取更多详细信息***.com/a/34628138/2946329 【参考方案1】:

上下文的生命周期从创建实例时开始,到实例被释放或垃圾回收时结束。如果您希望将上下文控制的所有资源都放置在块的末尾,请使用 using。

使用 using 时,编译器会自动创建一个 try/finally 块,并在 finally 块中调用 dispose。

【讨论】:

以上是关于我必须在实体框架 6 中为 DbContext 使用“使用”块吗的主要内容,如果未能解决你的问题,请参考以下文章

无法在类库中为实体框架启用迁移

如何使Readity实体框架数据上下文

如何在 Visual Studio 2013 中为 sqlite 配置实体框架 6

如何刷新实体框架核心 DBContext?

C# 实体框架 DBContext

实体框架:如何防止 dbcontext 被多个线程访问?