Reputation: 6768
I have appsettings.json
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionString": "Server=...;Database=...;Trusted_Connection=True;"
}
and Database class
public class Database : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlServer(@"Server=...;Database=...;Trusted_Connection=True;");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Material>().ToTable("vw_Material", schema: "query");
}
public virtual DbSet<Material> Material { get; set; }
}
My question is, how to replace this line
optionsBuilder.UseSqlServer(@"Server=...;Database=...;Trusted_Connection=True;");
with value from appsettings ?
Upvotes: 3
Views: 1390
Reputation: 9165
You can use DI for this purpose. To do that you need to register Configuration in Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<IConfiguration>(Configuration);
}
Then you can inject it to Database constructor:
private readonly IConfiguration configuration;
public Database(IConfiguration config)
{
configuration = config;
}
and access it on configuring:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlServer(configuration.GetConnectionString("ConnectionString"));
Another option is to use Options pattern. In this case you have to create a class with the property which you need:
public class ConnectionStringConfig
{
public string ConnectionString { get; set; }
}
Register it on Startup:
public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<ConnectionStringConfig>(Configuration);
}
Inject to Database constructor:
private readonly ConnectionStringConfig configuration;
public Database(IOptions<ConnectionStringConfig> config)
{
configuration = config.Value;
}
and access it on configuring:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlServer(configuration.ConnectionString);
Upvotes: 5