ASP.NET WebAPI 2 +实体框架连接缓存的最佳实践

Zib*_*eah 4 c# asp.net entity-framework azure asp.net-web-api

我正试图找出使用WebAPI和Entity Framework在我的平台上执行操作的最佳方法.

现在我正在为每个请求创建一个新连接:在每个控制器中都有一个对象被实例化并为每个方法处理.

public class SchedulerController : ApiController
{
    private ApplicationDbContext db = new ApplicationDbContext();

    protected override void Dispose(bool disposing)
    {
        if (disposing)
            db.Dispose();
        base.Dispose(disposing);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,为每个请求创建连接是一个影响性能的完整开销.我知道在Java上有一些工具(可能是Nutcracker?)处理一种连接池以重用相同的连接,这样就可以提高性能.

在c#/ ASP.NET/Azure平台上有类似的东西吗?

我非常感谢请求增长数字的性能比较.

编辑:这主要是指DbContext自身的缓存.

Jua*_*anR 10

我认为您误解了实体框架的工作原理.

EF使用ADO.NET,因此连接池实际上由提供者管理.您可以通过连接字符串更改池的行为.我相信它默认重用连接.

EF也在内部使用一些模式,如工作单元,因此它意味着封装一组操作(因此名称中的"上下文"一词).这就是为什么你有一个SaveChanges()方法"提交"数据库的一切.

因此,实际上建议您为每个请求创建一个新实例,以保证"工作单元"的完整性,即使这样,您也应该确保以转换为原子事务的方式保存更改在db方面的事情.

但是,您可以做的只是在需要时创建实例,而不是让控制器在每次请求时创建实例.再说一次,如果你使用的是Web API,你几乎总是需要访问数据,所以......