Asp.net core NET内核如何在第一次运行时初始化连接字符串?
我正在构建一个企业应用程序,我第一次希望使用run网站能够选择要连接的SQL server以及该服务器中的数据库。在这之后,应用程序总是像普通的asp.net核心应用程序一样在这些配置上运行 我知道连接字符串存储在Asp.net core NET内核如何在第一次运行时初始化连接字符串?,asp.net-core,connection-string,Asp.net Core,Connection String,我正在构建一个企业应用程序,我第一次希望使用run网站能够选择要连接的SQL server以及该服务器中的数据库。在这之后,应用程序总是像普通的asp.net核心应用程序一样在这些配置上运行 我知道连接字符串存储在appsettings.json中,所以在选择此配置后,我考虑在运行时更改它的值,但在搜索了很多之后,我认为这是不可能的 有什么方法可以做到这一点吗?您必须在Program.cs中加载appsettings.json文件 public static void Main(string[]
appsettings.json
中,所以在选择此配置后,我考虑在运行时更改它的值,但在搜索了很多之后,我认为这是不可能的
有什么方法可以做到这一点吗?您必须在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();
}
将
appsettings.json
添加到ConfigurationBuilder
时,将reloadOnChange
设置为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 void配置服务(IServiceCollection服务)
{
// ...
Configure(Configuration.GetSection(“connectionString”);
}
现在可以通过依赖项注入使用此配置
public class HomeController : Controller
{
private readonly ConnectionString _connectionString;
public HomeController(IOptionsSnapshot<ConnectionString> connectionString)
{
_connectionString = connectionString.Value;
}
}
公共类HomeController:控制器
{
私有只读连接字符串\u连接字符串;
公共家庭控制器(IOptionsSnapshot连接字符串)
{
_connectionString=connectionString.Value;
}
}
IOptionsSnapshot
可以在配置数据更改时重新加载配置数据
有关的详细信息。在连接到SQL Server Db之前,请确保已安装以下NuGet软件包 首先,您必须在
appsettings.json中创建连接字符串,如下所示
"ConnectionStrings": {
"DefaultConnection": "Server=DESKTOP-O57GSNN\\MSSQLSERVERNEW,Database=BookListRazor;Trusted_Connection=True;MultipleActiveResultSets=True"},
这里,DefaultConnection是您将要使用的连接名称。请提供您想要的任何有意义的名称,并在配置时使用。另外,请提供SQL Server Management Studio中的服务器名称(请参见下图),并提供数据库的名称(将创建)
然后创建ApplicationDbContext.cs
文件并在下面键入代码
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
public DbSet<Book> Book { get; set; }
}
DefaultConnection是已在appsettings.json
为什么您需要在运行时更改配置值?我希望用户选择配置,并在下一次运行中以通常方式加载的配置。我希望运行一个页面,让用户选择服务器地址和数据库,然后将其保存在配置中并运行实际的网站。这种方法称为代码优先方法。首先,您必须创建连接appsettings.json
中的字符串。然后创建ApplicationDbContext
,最后在Startup.cs
文件中使用SQL Server配置对其进行配置。按照下面给出的步骤操作。如何在不连接DB的情况下运行应用程序,并在选择config后将其保存在config中
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(option => option.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddRazorPages().AddRazorRuntimeCompilation();
}