我正在尝试找出使用 WebAPI 和 Entity Framework 在我的平台上执行操作的最佳方法。
现在,我正在根据每个请求创建一个新连接:在每个 Controller 中,都有一个实例化的对象,并为每个方法进行处置,例如。
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本身进行的缓存。
最佳答案
我认为您误解了 Entity Framework 的工作原理。
EF 在幕后使用 ADO.NET,因此连接池实际上由提供程序管理。您可以通过连接字符串更改池的行为。我相信它默认会重用连接。
EF 还在内部使用了一些模式,例如工作单元,因此它旨在封装一组操作(因此名称中包含“上下文”一词)。这就是为什么您有一个 SaveChanges() 方法将所有内容“提交”到数据库。
因此,实际上建议您为每个请求创建一个新实例,以保证“工作单元”的完整性,即使如此,您也应该确保以可转换为的方式保存更改数据库端的原子事务。
但是,您可以做的是仅在需要时创建实例,而不是让 Controller 根据每个请求创建实例。话又说回来,如果您使用 Web API,您几乎总是需要访问数据,因此...
关于c# - ASP.NET WebAPI 2 + Entity Framework 连接缓存最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42516981/