ASP.NET Core如何在首次运行时初始化连接字符串?

时间:2018-07-06 14:41:50

标签: asp.net-core connection-string

我正在构建一个企业应用程序,并且我希望第一次使用该网站可以选择要连接的SQL Server以及该服务器中的数据库。之后,应用程序将始终像普通的asp.net核心应用程序那样在配置上运行。

我知道连接字符串存储在appsettings.json中,因此我在考虑选择此配置后在运行时更改其值,但是经过大量搜索后,我认为这是不可能的。

有什么建议可以解决这个问题?

3 个答案:

答案 0 :(得分:0)

您必须在Program.cs中加载appsettings.json文件

public static void Main(string[] args)
{
    IConfigurationRoot configuration = new ConfigurationBuilder()
      .AddJsonFile("appsettings.json", optional: false) 
      .Build();

    string conStr = configuration.GetConnectionString("DefaultConnection");

    // your code


    var host = WebHost.CreateDefaultBuilder();

    host.Run();
} 

答案 1 :(得分:0)

在将reloadOnChange添加到appsettings.json时,将ConfigurationBuilder设置为true:

var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
    .AddEnvironmentVariables();

然后为连接字符串创建一个类

public class ConnectionString
{
    public string Default {get; set;}
}

ConfigureServices方法中:

public void ConfigureServices(IServiceCollection services)
{
    // ...

    services.Configure<ConnectionString>(Configuration.GetSection("ConnectionStrings"));
}

现在可以通过依赖注入来使用此配置。

public class HomeController : Controller  
{
    private readonly ConnectionString _connectionString;

    public HomeController(IOptionsSnapshot<ConnectionString> connectionString)
    {
        _connectionString = connectionString.Value;
    }
}

IOptionsSnapshot可以在更改时重新加载配置数据。

有关Configuration的更多信息。

答案 2 :(得分:0)

在连接到SQL Server Db之前,请确保已安装以下NuGet软件包。

Requested NuGet Packages

首先,您必须像下面这样在appsettings.json中创建连接字符串

"ConnectionStrings": {
"DefaultConnection": "Server=DESKTOP-O57GSNN\\MSSQLSERVERNEW,Database=BookListRazor;Trusted_Connection=True;MultipleActiveResultSets=True"},

这里,DefaultConnection是您将要使用的连接名称。请提供您想要的任何有意义的名称,该名称将在配置时使用。还要从SQL Server Management Studio提供服务器名称(请参见下图),并为您的数据库(将被创建)。

Connect to SQL Server

然后创建ApplicationDbContext.cs 文件并在下面的代码中键入

 public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {
            
    }

    public DbSet<Book> Book { get; set; }
}

Book是我应用程序中的模型。

最后使用ConfigureServices文件中Startup.cs 方法内的SQL Server配置对它进行配置。

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(option => option.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddRazorPages().AddRazorRuntimeCompilation();
    }

DefaultConnection是appsettings.json

中已经提到的连接名称。