小编Ral*_*ama的帖子

.NET Core WebApp,多域,根据主机名更改SQL连接字符串,无法将httpcontext注入DB Context.cs文件

我正在使用 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

1
推荐指数
1
解决办法
512
查看次数