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

我正试图找出使用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自身的缓存.

解决方法:

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐