首页 > 解决方案 > 实体框架的“使用”关键字与类字段

问题描述

我知道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 调用后会正确处理吗?第一个例子是不好的做法吗?

标签: c#entity-frameworkusing-statement

解决方案


将其封装在 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)控制器更容易,因此它可能不是最佳实践。


推荐阅读