c# - 实体框架的“使用”关键字与类字段
问题描述
我知道using
关键字基本上在作用域结束后调用,但是,将子句中的变量作为类字段Dispose()
是不好的做法还是不可接受的?using
例子:
public class ValuesController : ApiController
{
DatabaseEntities db;
public ValuesController()
{
db = new DatabaseEntities();
}
public IHttpActionResult GetList()
{
return Ok(db.Values.ToList());
}
}
与:
public class ValuesController : ApiController
{
public IHttpActionResult GetList()
{
using (DatabaseEntities db = new DatabaseEntities())
{
return Ok(db.Values.ToList());
}
}
}
DatabaseEntities
在第一个示例中完成 API 调用后会正确处理吗?第一个例子是不好的做法吗?
解决方案
将其封装在 Controller 中是安全的,但前提是您将其 Dispose 在 Controller 的Dispose(bool)
. 例如:
public class ValuesController : ApiController
{
DatabaseEntities db;
public ValuesController()
{
db = new DatabaseEntities();
}
public IHttpActionResult GetList()
{
return Ok(db.Values.ToList());
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
但是使用 DI 比覆盖Dispose(bool)
控制器更容易,因此它可能不是最佳实践。
推荐阅读
- angular - 设置 Angular Firebase 托管 404 页面
- python - KeyError: 'not found in index' -created dummy variables not found in index
- java - 所有页面中都存在一个图标,如何在不使用重复代码的情况下对其进行编码?
- tensorflow - 有选择地应用示例权重
- arrays - 如何正确插入包含另一个对象的对象的文档
- javascript - 如何提升奇数并保持偶数在他们的位置
- php - 运行 composer.phar 安装的 CodeDeploy after_install 脚本错误
- c++ - C++ 是否有办法做 Cuda 风格的内核模板,其中参数产生单独的编译?
- google-cloud-platform - 如何使用谷歌平台定价计算 GCP 中的计划快照成本?
- r - 如何将 actionButton 计数器停止为零?