一.使用背景
一般情况下,我们大多数的数据业务逻辑都在 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; }
具体用哪种方式,就看实际情况哪种方便用哪种