实体框架上下文应该使用语句吗?

c# entity-framework

Entity Framework上下文对象实现Dispose()方法,该方法“释放对象上下文使用的资源”。它真的有什么作用?总是将它放入using {}语句会不会是一件坏事?我已经看到它使用和不使用using语句。

我特意要在WCF服务方法中使用EF上下文,创建上下文,做一些linq并返回答案。

编辑:似乎我不是唯一一个对此感到疑惑的人。另一个问题是Dispose()方法中真正发生了什么。有人说它关闭了连接,有些文章没有说。这是怎么回事?

一般承认的答案

如果创建上下文,则必须稍后进行处理。如果你应该使用using语句取决于上下文的生命周期。

  1. 如果在方法中创建上下文并仅在此方法中使用它,则应该使用using语句,因为它为您提供了异常处理而无需任何其他代码。

  2. 如果你使用上下文更长的时间 - 也就是生命时间不受方法执行时间的约束 - 你不能使用using语句而你必须自己调用Dispose()并注意你总是调用它。

Dispose()对对象上下文做了什么?

我没有查看代码,但至少我认为它可以用它的底层套接字或传输机制使用的任何资源来关闭数据库连接。


热门答案

Per Progamming Entity Framework :“您可以显式地处置ObjectContext或等待垃圾收集器完成工作。”

因此,简而言之,虽然不需要using语句,但如果您知道使用ObjectContext已经完成了最佳实践,因为资源立即被释放而不是等待垃圾回收。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因