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

44

当我在实体框架(Entity Framework)中创建"Entities"对象并使用它执行一些查询时,连接会发生什么变化?

  • 当我创建对象时,它是否会打开连接,并在我处理对象时关闭连接?
  • 还是它会为每个单独的查询打开和关闭一个连接?

无论哪种情况,有可能更改连接行为吗?


3
哇,@pb2q对一个六年前的问题做了非常重要的编辑!干得漂亮! - Daniel Magliola
1
dMagiola:没问题。很高兴能帮助你进行任何改进:无论是重要的还是不重要的,无论是旧的还是新的。继续问吧,伙计! - pb2q
2个回答

33

6
两个链接已失效。 - Programmer Paul

8

@aaaaaa - 也许你正在查看EF5及以前的示例?在第二个代码示例中,using子句就像你想要的那样。请注意,只有在实际上需要手动处理连接时(例如,在EF之外执行语句),才需要担心这一点。如果您不需要这样做,则根本不需要考虑打开和关闭连接。 - Rory
1
啊,我明白你的意思了。我猜这是ADO的一个特性,你总是需要在一个单独的方法调用中打开连接。表面上看起来,也许有一个构造函数可以打开它(也许有吗?)...但实际上并不那么糟糕,而且它确实使它变得清晰易懂。当你手动处理数据库连接时,显式是好的,因为这样更容易看到正在发生什么,这通常是不引入微妙错误的必要条件。 - Rory
如果您不喜欢隐式关闭的不对称性,您可以随时手动Close()连接。 - Rory
是的 - 我一直认为 using 语句正是用于这些场景 - 防止手动打开连接,出现错误,然后未关闭连接。不过你的解释对我来说已经足够好了。我在 .net 方面不是很熟练,更多的是 js 方面的。谢谢你的时间! - aaaaaa
自行打开EF连接似乎会绕过IDbConnectionInterceptor.Opened方法,如果您正在使用IDbConnectionInterceptor的话。 - xr280xr
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接