EntityFramework Core上下文实例池原理
【导读】 无论是在我个人博客还是著作中,对于上下文实例池都只是通过大量文字描述来讲解其基本原理,而且也是浅尝辄止,导致我们对其认识仍是一知半解,本文我们摆源码,从源头开始分析 希望通过本文从源码的分析,我们大家都能了解到上注入下文和上下文实例池的区别在哪里,什么时候用上下文,什么时候用上下文实例池 友情提醒:此文略长,若心情烦躁、郁闷,无法静心,可以 直接滑至 文末总结 或另安排时间再详细阅读本文 上下文实例池原理准备工作 上下文实例池和线程池原理从概念来上讲一样,都是可重用,但在原理实现上却有本质区别。EF Core定义上下文实例池接口即IDbContextPool,将其接口实现抽象为:租赁(Rent)和归还(Return)。如下: public interface IDbContextPool { DbContext Rent ( ) ; bool Return ( [NotNull] DbContext context ) ; } 那么租赁和归还的机制是什么呢?接下来我们从注入上下文实例池开始讲解。 当我们在Startup中注入上下文和上下文实例池时,其他参数配置我们暂且忽略,从使用上二者最大区别在于,上下文可自定义设置生命周期,默认为Scope,而上下文实例池可自定义最大池大小,默认为128。 那么问题来了,上下文实例池所管理的上下文的生命周期到底是什么呢?我们一探源码究竟