asp.net-mvc - 将 MVC 应用程序与多个数据库和切换数据库链接的最佳方法?

标签 asp.net-mvc ef-code-first multiple-databases

我正在处理一个新项目,客户要求我为他们的三个不同分支创建单独的 SQL 数据库。主要问题是在 Asp.Net MVC 项目中切换连接并创建它们之间的关系。 我将使用 Entity Framework 代码优先方法来开发应用程序。我正在考虑在应用程序的 Web.Config 文件中创建三个不同的连接。

SQL 连接

<add name="Con1" connectionString="Data Source=.\SqlExpress;Initial Catalog=dbBranch1;
     Integrated Security=True" providerName="System.Data.SqlClient" />

<add name="Con2" connectionString="Data Source=.\SqlExpress;Initial Catalog=dbBranch2;
     Integrated Security=True" providerName="System.Data.SqlClient" />

<add name="Con3" connectionString="Data Source=.\SqlExpress;Initial Catalog=dbBranch3;
     Integrated Security=True" providerName="System.Data.SqlClient" />

现在的问题是我不知道如何根据用户从下拉列表中选择的分支来切换连接。如果用户在插入记录时在下拉列表中选择 Branch1,则记录应插入到 Branch1 数据库.如何在应用程序数据库上下文文件中配置三个连接?

应用程序数据库上下文

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("Con1", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

同样,加入三个数据库记录并得到结果也是一件令人头疼的事情。我可能需要在播种期间编写存储过程来获取记录。

我建议我的客户创建一个数据库并拥有一个分支表并进行规范化。但他想要三个独立的数据库。实现此目标的最佳架构或方法是什么?

最佳答案

而不是将硬编码的 connectionString 传递给您的 context 类。传递一个变量并将该变量传递给 bass 类。

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(string connString)
        : base(connString, throwIfV1Schema: false)
    {
    }
}

然后像下面这样初始化你的connectionString

ApplicationDbContext dbcontext = new ApplicationDbContext("con1");

ApplicationDbContext dbcontext = new ApplicationDbContext("Con2");

关于asp.net-mvc - 将 MVC 应用程序与多个数据库和切换数据库链接的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366936/

相关文章:

c# - 覆盖 SaveChanges 并设置 ModifiedDate,但如何设置 ModifiedBy?

database - 如何连接同一台Sybase服务器上不同数据库中的表

c# - 嵌套 View - 如何从 Controller 访问?

c# - Application_AcquireRequestState 未执行

asp.net-mvc - 派生自 RegularExpressionAttribute 的自定义 DataAnnotations 验证器

asp.net-mvc - 具有适当 knockout 绑定(bind)的网格小部件

c# - EF4 代码优先 - 从数据库中删除父项时删除所有子项?

asp.net-mvc - EF 代码优先模块化设计

mysql - 在 codeigniter 中合并来自 2 个数据库的结果

upgrade - Rails 5升级问题: database configuration does not specify adapter