从多个数据库中获取数据

时间:2012-01-30 05:28:27

标签: asp.net sql-server database entity-framework-4.1 multiple-databases

我有多个数据库,比如DB1,DB2,DB3和MembershipDB。 每个数据库都有名为ApplicationID&的GUID列。具有MembershipID作为GUID的用户集。 每个数据库的每个用户与其他数据库的用户隔离(没有关系)。 成员资格数据库包含Users MembershipID和Database的ApplicationID,密码,用户名,电子邮件等。

我需要创建一个通用的登录系统,例如当用户提供他的登录凭证时,将从MembershipDB进行身份验证,并且他的数据将从他注册的数据库中获取。
例如:来自DB1的用户提供他的登录详细信息,身份验证是从membershipDB中完成的。现在,他的其他数据将从DB1(当他注册到DB1)提取到他的仪表板。我有点混淆如何构建这个登录系统。
认证部分没问题。但是如何连接到正确的数据库以获取用户的正确数据。
欢迎所有宝贵的意见和建议。

我正在使用Microsoft SQL SERVER 2008,Entity Framework 4.2(数据库ist方法),WCF,asp.net MVC 4

2 个答案:

答案 0 :(得分:0)

在成员发货数据库中,您应该有一个列,记录此用途将使用的数据库 例如: id,用户名,密码,applicationid,电子邮件,DBName

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 //然后使用与上面类似的方法

答案 1 :(得分: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),以存储Customer Name及其数据库连接字符串名称的映射。

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

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

如果您需要更详细的信息,请与我们联系。