Entity Framework 何时打开和关闭数据库连接?

Posted

技术标签:

【中文标题】Entity Framework 何时打开和关闭数据库连接?【英文标题】:When does Entity Framework open and close Database Connections? 【发布时间】:2010-11-19 22:34:10 【问题描述】:

当我在实体框架中实例化我的“实体”对象并使用该实体对象进行几个查询时,连接会发生什么情况?

在我实例化对象时它会打开一个连接,并在我处理它时关闭它吗? 或者它是否会为我执行的每个查询打开和关闭一个连接?

在任何一种情况下,是否有可能改变它,让它做另一件事?

【问题讨论】:

哇 @pb2q 对一个 6 年前的问题进行了非常重要的修改!做得很好! dMagiola:没问题。乐于帮助任何改进:重要或其他,旧的或新的。继续问哥们! 【参考方案1】:

基本上,它在调用请求时打开,并在结果处理或使用后关闭。您可以使用对象上下文手动打开/关闭或使用相同的连接...

这篇文章有更完整的解释—— http://msdn.microsoft.com/en-us/library/bb738582.aspx (archive.org)

这是使用实体连接的方法 - http://msdn.microsoft.com/en-us/library/bb738461.aspx (archive.org)

【讨论】:

两个链接都失效了【参考方案2】:

EF6 中的行为有所改变,允许您传入打开的连接或稍后自己打开 EF 连接。查看https://msdn.microsoft.com/en-us/library/dn456849(v=vs.113).aspx

【讨论】:

非常感谢您的链接 - 有没有办法通过 c# 的 using 子句声明打开的连接?例如using(var conn = openAConnection())。您共享的链接显示了手动打开连接,当相关上下文被释放时,该连接被关闭,这看起来非常不直观和 hacky。 @aaaaaa - 也许您正在查看 EF5 和前面的示例?在第二个代码示例中是您想要的 using 子句。请注意,如果您真的想手动使用连接做某事,您只需要担心这一点,例如在 EF 之外执行语句。如果您不需要,那么您根本不需要考虑打开和关闭连接。 “ES6 和未来版本中的行为”:conn.Open();。这就是让我恼火的台词。是的,我显然需要它从存储过程中获取多个结果集(试图将 db 请求保持为每个视图一个) 啊,我明白你的意思了。好吧,我想这是一个 ADO 的事情,你总是必须在单独的方法调用中打开一个连接。从表面上看,似乎拥有一个打开它的构造函数会更容易(也许有一个?)......但它并没有那么糟糕,它确实使它变得很好和明确。当您手动使用数据库连接时,我认为显式很好,因为它更容易准确地看到正在发生的事情,这通常是不引入细微错误所必需的。 如果您不喜欢隐式关闭的不对称性,您可以随时手动关闭()连接。

以上是关于Entity Framework 何时打开和关闭数据库连接?的主要内容,如果未能解决你的问题,请参考以下文章

什么是自有实体?何时以及为什么在 Entity Framework Core 中使用 Owned Entity?

Entity Framework 4 / POCO - 从哪里开始? [关闭]

是否有适用于 Entity Framework 5 的可靠分析器? [关闭]

如何关闭 Entity Framework Core 5 中的所有约定

在 .NET Core 3.1 和 Entity Framework Core 中处理非常大的请求是一个好主意[关闭]

不能在 Entity Framework 6.1.3 和 PostgreSQL 中使用打开的事务