将MVC应用程序与多个数据库和交换机数据库链接的最佳方法?

时间:2017-04-12 10:25:48

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

我正在开发一个新项目,客户端要求我为他们的三个不同分支创建单独的SQL数据库。主要问题是在Asp.Net MVC项目中切换连接并在它们之间创建关系。 我将使用Entity Framework Code First Approach来开发应用程序。我想在应用程序的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数据库 。如何在Application Db Context File中配置三个连接?

应用程序Db上下文

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

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

同样,加入三个数据库记录并获得结果也将是头痛的问题。我可能需要在播种期间编写存储过程来获取记录。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

ApplicationDbContext dbcontext = new ApplicationDbContext("con1");

OR

ApplicationDbContext dbcontext = new ApplicationDbContext("Con2");