我知道各种教程以及针对 WebApi
和 Entity Framework
(甚至来自 Microsoft)的完整示例,它们具有 WebApi
Controller ,例如这个:
public HttpResponseMessage GetInternet(int id) {
var context = new InternetDbContext();
var result =
(from internet in context.Internets
where internet.Id.Equals(id)
select internet).FirstOrDefault();
if(result != null)
Request.CreateResponse(HttpStatusCode.OK, result);
}
但是当我在 2 年前了解 Entity Framework
时,我找到的关于该框架的每一个资源都指出了DISPOSE DbContex 是多么的重要
SHORTEST 可能的生命周期,例如使用“使用
”。而如今,人们似乎对处置任何东西(他们的管理器、存储库、DI 容器......)都不屑一顾。
我是不是漏掉了什么? API 调用结束时是否会自动处理上下文?还是我必须使用来自 http://msdn.microsoft.com/en-us/library/dn153859(v=vs.118).aspx 的 HttpRequestMessageExtensions.RegisterForDispose()
之类的东西? ?
最佳答案
就我个人而言,每当我看到类型实现 IDisposable
时,我几乎可以肯定在处理这种类型的新实例时我将使用 using
语句.
当变量超出范围时(就像在您的情况下,当执行从 GetInternet
方法返回时 context
变量超出范围),它的内存最终是将被垃圾收集器回收,但这并不意味着任何 native 处理程序(例如文件处理程序或数据库连接)将被关闭,这会对您的应用程序产生非常严重的负面影响。
因此,考虑始终将 IDisposable
包装到 using
结构中:
using (var context = new InternetDbContext())
{
// Your code goes here
}
希望这对您有所帮助。
关于c# - 为什么 WebApi Controller 运行后没有人处理 DbContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836837/