如何从 Asp.Net Core 中的 DBContext 文件中的 appsettings.json 读取连接字符串?

viv*_*una 2 c# asp.net-core

我在 appsettings.json 文件中定义了一个连接字符串。现在我想在我的 TextDBConext 文件中读取它,我该怎么做?

public class TestContext: DbContext
    {
        public DbSet<TestTable> TestTable { get; set; }
        public TestContext()
        {
        }
        public IConfiguration Configuration { get; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Connection string"); //I have hardcoded here, but I want from appsettings.json
        }
    }
Run Code Online (Sandbox Code Playgroud)

Appsettings.json 文件:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "connection_string": "Connection String"
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 7

您可以在启动文件中设置数据库上下文,并且OnConfiguring根本不覆盖。只需添加一个DbContextOptions<TContext>传入 DbContext 类的构造函数即可。该构造函数应将参数传递给base类的构造函数,然后AddDbContext<TContext>Startup.Configure如下方式调用:

// your TestContext showing constructor
public class TestContext : DbContext
{
    public TestContext(DbContextOptions<TestContext> options) : base(options){ }
}

// Then in Startup.cs
public class Startup
{
   public IConfiguration Configuration {get;}

   public Startup(IConfiguration configuration)
   {
      Configuration = configuration;
   }

   public void ConfigureServices(IServiceCollection services)
   {
       services.AddDbContext<TeamsDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("connection_string")));
   }
}
Run Code Online (Sandbox Code Playgroud)

值得注意的是,该AddDbContext<TContext>方法具有重载,允许将上下文的服务生命周期设置为 Singleton 或 Transient(如果您愿意)。默认为范围。


归档时间:

查看次数:

11244 次

最近记录:

5 年,11 月 前