Acr*_*gma 12 .net c# entity-framework asp.net-mvc-4 asp.net-web-api
我知道各种教程以及完整的示例目标WebApi和Entity Framework(甚至来自Microsoft)具有这样的WebApi控制器:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我了解到Entity Framework像2年前,我每次发现对框架资源指出了它是多么极为重要部署了DbContex在最短可能的寿命与"例如using".而现在,人们似乎并没有放弃处理任何东西(他们的经理,存储库,DI容器......).
我在这里错过了什么吗?API调用的结尾是否会自动处理上下文?或者我必须使用HttpRequestMessageExtensions.RegisterForDispose()来自http://msdn.microsoft.com/en-us/library/dn153859(v=vs.118).aspx的内容?
就个人而言,每当我看到类型实现时IDisposable,我几乎可以肯定我using在处理这种类型的新实例时会使用一个语句.
当变量超出范围时(例如,context当执行从GetInternet方法返回时变量超出范围),其内存最终将由垃圾收集器回收,但这并不意味着任何本机处理程序(例如将关闭文件处理程序或数据库连接,这会对您的应用程序产生非常严重的负面影响.
因此,请考虑始终将一个包装IDisposable到using构造中:
using (var context = new InternetDbContext())
{
// Your code goes here
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.