在一些特殊的场景,我可能会更换访问的数据库,猜想(玩游戏的时候:选择不同的区登录,选区就是更换数据库,比如你用qq登录王者,可登录1区或者2区,两个区中,你的英雄,皮肤,和段位是不一样的)
上下文的调整
(1) 在上下文中加入一个静态的字段
private static string _datasource = "MESDB";
(2) 使用静态字段来作为配置文件中的连接字符串name
public MESDB(): base("name="+_datasource)
{
}
(3)提供一个静态方法来改变静态字段的值
public static void SetDataName(string datasource)
{
_datasource = datasource;
}
完整代码如下:
public partial class MESDB : DbContext
{
private static string _datasource = "LeanDB";
public MESDB() : base("name="+_datasource)
{
}
public static void SetDataName(string datasource)
{
_datasource = datasource;
}
public virtual DbSet<MES_ROLE_USER> MES_ROLE_USER { get; set; }
}
在控制器中提供一个接口方法
/// <summary>
/// 更换数据源
/// </summary>
/// <param name="dataname">
/// </param>
[Route("SetDatasource")]
[HttpPost]
public void ReplaceDatasource(string datasource)
{
MESDB.SetDataName(datasource);
}
配置文件
在connectionStrings中配置多个数据库连接字符串
<connectionStrings>
<add name="LeanDB" connectionString="metadata=res://*/Models.Lean.csdl|res://*/Models.Lean.ssdl|res://*/Models.Lean.msl;provider=System.Data.SqlClient;provider connection string="data source=SUZ-SQL-004;initial catalog=test1;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="LeanDB_KT" connectionString="metadata=res://*/Models.Lean.csdl|res://*/Models.Lean.ssdl|res://*/Models.Lean.msl;provider=System.Data.SqlClient;provider connection string="data source=SUZ-SQL-tra;initial catalog=test2;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>