一.使用背景
一般情况下,我们大多数的数据业务逻辑都在 Controller 进行操作的,毕竟也方便,直接在控制器注入 DBContext 然后直接调用就好了(个人习惯写个基类控制器进行注入操作,然后其他控制器继承该基类,这样就不需要每新增一个控制器就得再写一次注入 DBContext 操作)

不过有些情况,我们需要把部分数据库操作指定在某些非 Controller 的类进行实现,这个时候,就需要操作一次类似 startup.cs 里面的数据库配置

二.具体实现
startup.cs 默认配置

public void ConfigureServices(IServiceCollection services)
{
    //Entityframework
    var connnectionString = Configuration.GetConnectionString("SqlServer");
    services.AddDbContext(option => option.UseSqlServer(connnectionString, b => b.MigrationsAssembly("Pomelo.Entity")));
 }

其他非控制器类
方式一:

 public class DBOption
    {
          DbContextOptionsBuilder< PomeloContext > builder = new DbContextOptionsBuilder< PomeloContext >();
        PomeloContext _DBContext;

        //构造函数
        public DBOption()
        {
            //获取数据库连接字符串,DBConfigModel 为 appsettings.json ConnectionStrings 节点下的数据实体结构
            string connectionString = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build().GetSection("ConnectionStrings").Get().SqlServer;
             
            builder.UseSqlServer(connectionString);

            _DBContext = new PomeloContext(builder.Options);
        }

        public string GetInfo()
        {
            return _DBContext.AdminUser.FirstOrDefault().Account;
        }
    }

根据实际情况,建议使用 单例模式 进行写这种类文件

方式二:

在函数里面使用 using 语句
DbContextOptionsBuilder builder = new DbContextOptionsBuilder();

public string GetInfo() {
  string connectionString = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build().GetSection("ConnectionStrings").Get().SqlServer;

  builder.UseSqlServer(connectionString);
  
  var account;
  using (PomeloContext db = new PomeloContext(builder.Options))
  {   
      account = db.AdminUser.FirstOrDefault().Account;
  }
  return account;
}

具体用哪种方式,就看实际情况哪种方便用哪种