EF Core之DBContext生命周期
DBContext是EF Core的核心,.Net Core WebApi开发的时候,绝大多数的场景下,我们只需要一个Scoped的DBContext即可,但有的时候Scoped是没法满足需求的
-
绝大多数场景下,只需要在Startup注入一个Scoped的Context即可:
services.AddDbContext<DBContext>(opt => opt.UseSqlServer(Configuration.GetConnectionString("Database")));
-
但很多场景下Scoped又不能满足我们,这时候就需要注入一个Singleton的DBContext的工厂方法:
services.AddSingleton<Func<DBContext>>(() => { var optionsBuilder = new DbContextOptionsBuilder<DBContext>(); optionsBuilder.UseSqlServer(CONNECTION_STRING); //如果有其他依赖的话,可以通过provider.GetService<XX>()来获取 return new DBContext(optionsBuilder.Options); });
-
在需要使用的时候,只需要注入Func,然后需要的时候调用:
//注入 public Repo(Func<DBContext> dbContextFactory) { _dbContextFactory = dbContextFactory; } //使用 public void DoSomething() { using (var _dbContext = _dbContextFactory()) { } }