我正在使用 Azure .NET 核心 WebApp、MVC、实体框架,搭建在现有的外部 MS SQL 数据库中。
我在启动 ConfigureServices 中注册数据库,如下所示:
services.AddDbContext<MyDbContext>(options => options.UseSqlServer());
Run Code Online (Sandbox Code Playgroud)
只要我在 MyDbContext.cs OnConfiguring() 方法中设置连接字符串,它就可以正常工作:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=10.10.10.10;Database=MyDb;user id=username;password=password;");
}
Run Code Online (Sandbox Code Playgroud)
然后我可以简单地在控制器中说:
private readonly MyDbContext _context;
public HomeController()
{
_context = new MyDbContext();
}
public IActionResult Index()
{
var item = _context.TableName.FirstOrDefault(d => d.Id > 0);
}
Run Code Online (Sandbox Code Playgroud)
这工作正常 - 数据流入。
我的问题是我需要根据连接的主机名更改 SQL 连接字符串。因此,无论是在启动 ConfigureServices() 中,如果我可以建立正在使用的主机名,我都可以传递连接,或者在 DB 的 MyDbContext.cs 文件的 OnConfiguring() 方法中。
我只能从 httpcontext 获取主机名,据我所知,在启动时无法查询?
如果我尝试将其注入 context.cs DB 文件,如下所示:
public partial class MyDbContext : DbContext …Run Code Online (Sandbox Code Playgroud) entity-framework asp.net-core-mvc azure-web-app-service asp.net-core