Asp.net 单网站多数据库,数据库切换
我已经为我公司的产品数据库创建了一个内容管理系统(CMS)。CMS基于asp.net脚手架,混合了许多自定义页面和操作。我们目前有7个产品,它们都共享相同的数据库模式(首先是实体框架模型),并且都在CMS中完美运行。问题是,每次我们获得新产品时,我们都必须克隆CMS并更改Asp.net 单网站多数据库,数据库切换,asp.net,entity-framework,Asp.net,Entity Framework,我已经为我公司的产品数据库创建了一个内容管理系统(CMS)。CMS基于asp.net脚手架,混合了许多自定义页面和操作。我们目前有7个产品,它们都共享相同的数据库模式(首先是实体框架模型),并且都在CMS中完美运行。问题是,每次我们获得新产品时,我们都必须克隆CMS并更改app.config中的连接字符串,以指向正确的数据库,以便使用新数据库。虽然这样做有效,但维护起来却越来越麻烦,而且随着我们获得更多的产品,这将使我们彻底失败 我想做的是有一个集中的登录页面,用户可以直接登录,然后根据他们的选
app.config
中的连接字符串,以指向正确的数据库,以便使用新数据库。虽然这样做有效,但维护起来却越来越麻烦,而且随着我们获得更多的产品,这将使我们彻底失败
我想做的是有一个集中的登录页面,用户可以直接登录,然后根据他们的选择选择连接和编辑特定的产品。我们的想法是,我们将有一个CMS网站,可以根据用户的不同在数据库之间切换。不能将所有产品数据库合并到一个主产品数据库中
我不确定从何处开始实现这一目标,或者这是否是实现我的单一CMS维护目标的正确计划,我正在寻找这方面的一些指导 假设您的数据库结构相同,您可以在获取实体上下文实例的任何位置使用factory方法,并将逻辑放入其中以获取正确的连接字符串(或者,如果您可以使用命名约定,则可以计算它)。例如,类似的方法可能会起作用:
public static MyDatabaseEntities CreateEntityContext(string productName)
{
string connectionString = null;
switch (productName.Trim().ToLower())
{
case "apples":
connectionString = ConfigurationManager.ConnectionStrings["MyDatabase_Apples"].ConnectionString;
break;
case "pears":
connectionString = ConfigurationManager.ConnectionStrings["MyDatabase_Pears"].ConnectionString;
break;
default:
connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
break;
}
return new MyDatabaseEntities(connectionString);
}
然后,在需要CRM数据上下文实例的任何地方使用此方法,该实例将传入您在登录页上计算的产品名称。为用户到数据库的映射创建另一个数据库。结构如下:
database UserMap
table Users
username (composite primary key)
dbID (composite primary key, foreign key to "Databases" table)
table Databases
dbID (primary key)
connectionString
那么
这将允许您依靠单个数据库进行查找,并以管理方式在它们之间进行切换。它需要一些前期工作,但在触发器出现后,您不必再做任何事情。如果您必须在新内容出现时做任何事情,听起来不像是CMS……也就是说,您确定这里没有更根本的问题吗?或者,你的问题有点模棱两可。不,我不确定我没有更基本的问题。产品数据库系统是在我加入这家公司之前很久就创建的,目前我们所有的产品都假设他们的产品是产品数据库中唯一的产品。这意味着我们需要为每种产品建立不同的产品数据库。我只是在寻找一种方法,让CMS连接到相应的产品数据库,根据作者想要编辑的产品,而不是每个产品都有一个特定的CMS。对我来说,这听起来像是一个基本的设计缺陷。很好,我没有考虑过动态生成连接字符串。我有一个非常可预测的方法来确定我的连接字符串。谢谢你的例子。这也是一个很好的方法。因为我可以预测连接字符串,所以我认为另一种方法对我来说会更好。