情景:存在两个Server,一个本机Debug的情况下,根据server与本机上存在的特有的文件来执行不同的连接方式的动作。
Database只有一个,存放在新server中,旧server可以访问到新servers 中Database
MVC中的Web.config中连接字符串
<connectionStrings>
<add name="MySQLConContext_New" connectionString="Server= ;Port= ;SqlServerMode=true;Database= ;UserId= ;Password= ;CharSet=utf8" providerName="MySql.Data.MySqlClient" />
<add name="MySQLConContext" connectionString="Server= ;Port= ;SqlServerMode=true;Database= ;UserId= ;Password= ;CharSet=utf8" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
Solution中class中的方法:
using System.Runtime.Remoting.Messaging;
public class ContextFactory
{
public static MyDbContext GetCurrentContext(){
//根据执行的环境不一样,存在的文档
bool SwitchFile = File.Exists(@"C:\PCS\10.41.16.93.txt"); //server1上存在的txt文档
bool SwitchFileNew = File.Exists(@"C:\PCS\10.41.23.172.txt");//server2上存在的txt文档
MyDbContext _DbContext = CallContext.GetData("MyContext") as MyDbContext;//初始为null
if (_DbContext == null)
{
if (SwitchFileNew)
{
_DbContext = new MyDbContext("MySQLConContext_New");//执行时如为true,执行MyDbContext(string)方法
}
else if (SwitchFile)
{
_DbContext = new MyDbContext("MySQLConContext");
}
CallContext.SetData("MyContext", _DbContext);
}
return _DbContext;
} }
using System.Data.Entity;
using System.Configuration;
using System.Data.Entity.ModelConfiguration.Conventions;
public class MyDbContext:DbContext//连接数据库
{
public DbSet<User> Users { get; set; }
public DbSet<Role> UserGroups { get; set; }
//构造函数
public MyDbContext(string conn):base(conn)//根据上一个方法传过来参数匹配Web.config里的字符串去连接不同的server
{
Database.CreateIfNotExists();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();//j禁止重新建表
}
}