Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET WebAPI 2+;连接缓存的实体框架最佳实践_C#_Asp.net_Entity Framework_Azure_Asp.net Web Api - Fatal编程技术网

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

C# ASP.NET WebAPI 2+;连接缓存的实体框架最佳实践,c#,asp.net,entity-framework,azure,asp.net-web-api,C#,Asp.net,Entity Framework,Azure,Asp.net Web Api,我正试图找出在我的平台上使用WebAPI和实体框架执行操作的最佳方法 现在,我在每个请求中创建一个新的连接:在每个控制器中,都有一个对象被实例化,并为每个方法(如)释放 public class SchedulerController : ApiController { private ApplicationDbContext db = new ApplicationDbContext(); protected override void Dispose(bool dispos

我正试图找出在我的平台上使用WebAPI和实体框架执行操作的最佳方法

现在,我在每个请求中创建一个新的连接:在每个控制器中,都有一个对象被实例化,并为每个方法(如)释放

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

    protected override void Dispose(bool disposing)
    {
        if (disposing)
            db.Dispose();
        base.Dispose(disposing);
    }
}
在我看来,为每个请求创建连接是影响性能的全部开销。我知道在Java上有一些工具(可能是胡桃夹子?)可以处理某种连接池来重用相同的连接,并通过这种方式提高性能

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

我也非常感谢您对请求数量的增长进行性能比较


编辑:这主要是指DbContext自己进行的缓存

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

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

EF在内部也使用了一些模式,比如工作单元,所以它的意思是封装一组操作(因此名称中有“context”一词)。这就是为什么您有一个SaveChanges()方法将所有内容“提交”到数据库

因此,实际上建议您为每个请求创建一个新实例,以保证“工作单元”的完整性,即使如此,您也应该确保以某种方式保存更改,以转换为数据库端的原子事务


但是,您可以做的是只在需要时创建实例,而不是让控制器在每次请求时创建实例。同样,如果您使用的是Web API,那么您几乎总是需要访问数据,因此…

创建新的DbContext不会打开任何数据库连接