【问题标题】:Change the connection string dynamically (per request) on Entity Framework 7 / MVC 6在 Entity Framework 7 / MVC 6 上动态更改连接字符串(每个请求)
【发布时间】:2015-08-25 16:45:10
【问题描述】:

我有一个 MVC 6 应用程序,我需要在其上连接到不同的数据库(即物理文件但相同的模式),具体取决于访问它的人。 也就是说:Web 应用程序的每个客户都将其数据隔离在 SQL 数据库中(在 Azure 上,具有不同的性能、价格水平等),但所有这些数据库将共享相同的关系架构,当然还有实体框架上下文类。

var cadConexion = @"Server=(localdb)\mssqllocaldb;Database=DBforCustomer1;Trusted_Connection=True;";
services.AddEntityFramework().AddSqlServer().AddDbContext<DAL.ContextoBD>(options => options.UseSqlServer(cadConexion));

问题是,如果我以这种方式注册服务,我会将它绑定到具体客户的具体数据库,我不知道在中间件执行开始时我是否可以更改后者(这将是一个很好的点我就知道谁在按门铃)。

我知道我可以构造数据库上下文,将连接字符串作为参数传递,但这意味着我应该在运行时(在管道的早期)为每个请求创建数据库上下文,我不知道这是否可以可能是低效或不好的做法。此外,我认为这样我就无法将数据库上下文注册为服务以将其注入我的控制器...

对此的正确方法是什么?有人在生产中使用类似的配置吗?

提前致谢

【问题讨论】:

    标签: azure-sql-database asp.net-core asp.net-core-mvc entity-framework-core


    【解决方案1】:

    我宁愿不回答我自己的问题,但我觉得我必须为那些有类似问题的人提供指导,经过对互联网的长期深入研究,这样我可以节省他们大量测试多连接的时间场景,这是相当费力的......

    我终于使用了 Azure 的一个(最近的)功能和 API,称为“弹性数据库工具”,简而言之,它是 Microsoft 的一组工具,旨在解决这个具体问题,特别是针对 SaaS(软件作为服务)场景(就像我的一样)。

    这是一个很好的链接:

    https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-scale-get-started/

    祝你的项目好运!

    【讨论】:

    • 如何在弹性数据库工具之上使用 EntityFrame 工作?
    【解决方案2】:

    首先,我不建议每个请求交换连接字符串。

    但这不是问题所在。你可以这样做。您需要向您的 DbContext 传递一个新的连接字符串。

    .AddDbContext 将连接字符串缓存在依赖注入容器中,因此您不能使用 DI 来使这种情况工作。相反,您需要自己实例化您的 DbContext 并向其传递一个新的连接字符串。

    【讨论】:

    • 如果您解释一下为什么您不建议在每个请求中交换连接字符串,将会更有帮助。
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2022-10-25
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多