ef框架 动态切换数据源信息(切换连接字符串)

在一些特殊的场景,我可能会更换访问的数据库,猜想(玩游戏的时候:选择不同的区登录,选区就是更换数据库,比如你用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=&quot;data source=SUZ-SQL-004;initial catalog=test1;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework&quot;" 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=&quot;data source=SUZ-SQL-tra;initial catalog=test2;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
	
</connectionStrings>

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值