我为公司的产品数据库创建了一个内容管理系统(CMS)。 CMS基于asp.net脚手架,其中混合了许多自定义页面和操作。我们目前有7个产品,所有产品共享相同的数据库模式(实体框架模型优先),并且都在CMS中完美运行。问题是,每次我们获得新产品时,我们必须克隆CMS并更改app.config
中的连接字符串以指向正确的数据库以便使用新数据库。虽然这样做有效,但维护起来很麻烦,并且在我们获得更多产品时会完全失败。
我想要做的是拥有一个集中登陆页面,用户可以在其中登录,然后根据他们的选择选择连接和编辑特定产品。我们的想法是,我们将有一个CMS站点,可以根据用户在数据库之间切换。不能将所有产品数据库合并到单个主产品数据库中。
我不知道从哪里开始实现这一目标,或者这是否是实现我的目标,即维持单一CMS的正确计划,并且我正在寻找一些指导。
答案 0 :(得分:2)
假设您的数据库结构相同,您可以在获得实体上下文实例的任何地方使用工厂方法,并在其中放置逻辑以获取正确的连接字符串(或者如果存在可以使用的命名约定则计算它)。像这样的东西可能会起作用:
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数据上下文实例传入您在目标网页上计算的产品名称,就可以使用此方法。
答案 1 :(得分:0)
为用户创建另一个数据库到数据库映射。结构就像这样:
database UserMap
table Users
username (composite primary key)
dbID (composite primary key, foreign key to "Databases" table)
table Databases
dbID (primary key)
connectionString
然后,
这将允许您依靠单个数据库进行查找,并以管理方式在它们之间切换。它需要一些前期工作,但在触发器出现后,您不必再做任何其他事情了。