1

我有多个数据库说DB1,DB2,DB3和MembershipDB。 每个数据库都有一个GUID列,名为ApplicationID &一组用户的MembershipID为GUID。 每个数据库的每个用户都与其他数据库的用户隔离(与此无关)。 会员数据库包含用户MembershipID和数据库的的applicationID,密码,用户名,电子邮件等
从多个数据库提取数据

我需要建立一个共同的登录系统,如当用户提供了登录证书认证从MembershipDB完成,他的数据是从他注册的数据库中提取。
例如:来自DB1的用户提供了他的登录详细信息,身份验证是从membershipDB完成的。现在,他的数据的其余部分将从DB1中获取(因为他已注册到DB1)到他的仪表板。我有点困惑如何建立这个登录系统。
认证部分没有问题。但是,如何连接到正确的数据库以获取用户的正确数据。
欢迎提供所有有价值的意见和建议。

我使用的是Microsoft SQL Server 2008中,实体框架4.2(IST数据库的方法),WCF,asp.net MVC 4

回答

0

在成员船DB,你应该有一个列记录的数据库该用途的去 例如: ID,用户名,密码的applicationID,电子邮件,数据库名

select * from membershipdb where username='user1', and password = 'password1'. 
//Code to fetch the database 
//rs = recordset 
//This assume these two database in same server 
String DB = rs.getString(6) // 6 is DBName 

DBobj->executeQuery("USE "+DB); 
DBobj->executeSelect("select * from DB1.Table1 where Column1 = 'column1'"); 

//如果数据库在不同的服务器上,您可以连接到服务器2,并分配给DBobj2 //然后使用与上面类似的方法

+0

感谢迈克尔,但考虑到这种情况最初有一个月左右的数据库db1 db2和membershipdb之后会有4个以上的数据库。所以很难遵循你的方法。 – coddey 2012-01-30 05:53:25

0

如果我正确地理解了你,那么你需要动态地连接到不同的数据库,而无需修改你的代码。假设您有2个客户Customer1和Customer2。您为这些客户创建了名为Database_Customer1和Database_Customer2的2个数据库。

将实体框架映射到任何客户数据库的名称为“CustomerDbSpecificEntities”的实体框架。

现在您需要在.config文件中添加以下连接字符串。

<add name="Database_Customer1_Entities" connectionString="metadata=res://*/CustomerDbSpecific.csdl|res://*/CustomerDbSpecific.ssdl|res://*/CustomerDbSpecific.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=Customer1ServerName;Initial Catalog=DatabaseCustomer1;Persist Security Info=True;User ID=userid;Password=password;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 
<add name="Database_Customer2_Entities" connectionString="metadata=res://*/CustomerDbSpecific.csdl|res://*/CustomerDbSpecific.ssdl|res://*/CustomerDbSpecific.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=Customer2ServerName;Initial Catalog=DatabaseCustomer2;Persist Security Info=True;User ID=userid;Password=password;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 

在数据访问层的代码,

String ConnectionStringName = MembershipDBProvider.GetConnectionStringNameForCustomer(CustomerName); 
using (CustomerDbSpecificEntities context = new CustomerDbSpecificEntities("Name=" + ConnectionStringName)) 
    { 
     //use context here 
    } 

创建公共数据库(会员数据库)的表(CustomerDbConnection)来存储客户名称和它的数据库连接字符串名称的映射。

'GetConnectionStringNameForCustomer(CustomerName)'在CustomerDbConnection表中进行搜索并返回给定客户的连接字符串名称。它用于建立与客户特定数据库的连接。

现在,如果您将来有新客户,则必须进行以下更改, 1.在CustomerDbConnection中添加新行。 2.在.config文件中添加新的连接字符串

如果您需要更详细的信息,请让我知道。

+0

Hello Arvind!感谢您的建议。请您详细说明您的建议! – coddey 2012-01-30 08:29:57

+0

该解决方案假定客户的所有特定数据库都使用相同的模式。因此,您只需创建一次实体框架映射,并通过传递不同的连接字符串即可连接到客户特定的数据库。如果你仍然需要更多的解释,那么我们可以聊天。 – 2012-01-31 08:41:25

+0

其更好的v可以聊天! [email protected] – coddey 2012-01-31 08:45:58