多租户ASP.NET核心

多租户ASP.NET核心,asp.net,entity-framework,asp.net-core,middleware,dbcontext,Asp.net,Entity Framework,Asp.net Core,Middleware,Dbcontext,您将如何配置中间件来根据收入请求的子域更改DBContext连接字符串 DBContext似乎是在启动中设置的。。。这看起来太早了,无法确定解析连接字符串的HTTPRequest。好吧,这可能不完全适合您的需要,但我会这样做: 创建一个DbContextFactory类。这个DbContextFactory类可以创建DbContext的实例,并可以将任何字符串传递给DbContext构造函数。然后注入这个工厂,每当您需要dbcontext的实例时,只要让工厂为您返回一个即可。当然,您必须自己管理

您将如何配置中间件来根据收入请求的子域更改DBContext连接字符串


DBContext似乎是在
启动中设置的。。。这看起来太早了,无法确定解析连接字符串的HTTPRequest。

好吧,这可能不完全适合您的需要,但我会这样做:

创建一个
DbContextFactory
类。这个
DbContextFactory
类可以创建
DbContext
的实例,并可以将任何字符串传递给
DbContext
构造函数。然后注入这个工厂,每当您需要dbcontext的实例时,只要让工厂为您返回一个即可。当然,您必须自己管理所创建上下文的生存期(即使用块)


另一个选项是创建
DbContextFactory
,以便它保存
DbContext
的实例。当您从工厂请求上下文对象时,工厂将创建一个新的上下文对象,并将其存储在私有字段中,随后的调用将返回该实例。使factory
IDisposable
,并在其
Dispose()
方法中处理上下文。这样你就不必担心管理生命周期(如果你使用范围注册)。你可以看看它是一个ASP.NET核心多租户Web应用程序基金会,为网站、用户、角色管理。索赔和更多。虽然它已经有一段时间没有更新了,我发现这个项目非常有助于多租户使用不同的数据库连接每个租户。