ASP.NET WebAPI 2 + Entity Framework 连接缓存的最佳实践

4

我正在尝试找出使用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);
    }
}

每次请求都创建连接,在我看来是一个完全无用的开销,会影响性能。我知道在Java上有一些工具(也许是Nutcracker?)可以处理某种连接池,以重复使用同一个连接,从而提高性能。那么在c# / ASP.NET / Azure平台上有类似的东西吗?
如果可以的话,我也很想了解在请求数增加时的性能比较。
编辑:这主要是指DbContext自身所做的缓存。

3
创建新的 DbContext 不会打开任何数据库连接。 - ErikEJ
1个回答

11

我认为你误解了Entity Framework的工作原理。

EF在底层使用ADO.NET,因此连接池实际上是由提供程序管理的。您可以通过连接字符串更改池的行为。我相信它默认情况下会重用连接。

EF还在内部使用一些模式,比如Unit of Work,所以它旨在封装一组操作(因此名称中有“context”一词)。这就是为什么您有一个SaveChanges()方法来“提交”所有内容到数据库的原因。

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

但是,您可以在需要时才创建实例,而不是在每个请求上由控制器创建它。然后再说,如果您使用Web API,几乎总是需要访问数据,因此...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接