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 中的所有约定