需求,一套系统,多个公司使用,但需要做公司数据分离,但是数据结构一样
如下:
A公司数据库
B公司数据库
C公司数据库
另外有一个总表,来存用户所属的公司和数据库名称
用户登陆系统,查询用户名后,根据数据库名来决定连接那个数据库
求多数据库连接思路
写sql语句 [库名].[dbo].表名
ps:同一个服务器上可以这么写
写纯SQL就体现不了EF的作用了
多个dbcontext单独管理,
如果必须需要跨库查询这种业务,可以院子里面搜一下解决方案,同义词方式
一个数据库一个dbcontext是能解决问题,但是不觉得这一点都科学么,如果一个数据库改了,如果我有十个公司就要改十个dbcontext,这个工作量太大了,不是我想要的
@beggar_:
new dbcontext(conn1);
new dbcontext(conn2);
new dbcontext(conn3);
也是可以的呀。你不是说结构都完全一致么,那意味着是一套entity咯
用户登录之后、判断是所属那个公司、那这里肯定有个公司表、那公司表肯定要关联一个数据库的连接地址。dbcontext 只有一个 你只是把连接地址传这个DbContext
我测试了一下,dbcontext在项目初始化时就加载了,里面的数据连接不能动态的配置,采用一个dbcontext还是没有找到好的解决方法
使用时直接初始化 connectstring:
string GetEntityConnectionString(string edmxFullName, string server, string dadaBase, string usr, string pswd, string appName)
{
System.Data.EntityClient.EntityConnectionStringBuilder entityConnectionStringBuilder = new System.Data.EntityClient.EntityConnectionStringBuilder();
entityConnectionStringBuilder.Metadata = "res://*/" + edmxFullName + ".csdl|res://*/" + edmxFullName + ".ssdl|res://*/" + edmxFullName + ".msl";
entityConnectionStringBuilder.Provider = "System.Data.SqlClient";
SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder();
sqlConnectionStringBuilder.DataSource = server;
sqlConnectionStringBuilder.InitialCatalog = dadaBase;
sqlConnectionStringBuilder.IntegratedSecurity = true;
sqlConnectionStringBuilder.UserID = usr;
sqlConnectionStringBuilder.Password = pswd;
sqlConnectionStringBuilder.MultipleActiveResultSets = true;
sqlConnectionStringBuilder.ApplicationName = appName;
entityConnectionStringBuilder.ProviderConnectionString = sqlConnectionStringBuilder.ToString();
return entityConnectionStringBuilder.ConnectionString;
}