0

我基本上有两个不同的数据库,其中有不同的表,但它们都有具有完全相同结构的“Table1”。

var db = new ???;
if(mode == "PRODUCTION"){
    db = new Database1("Connection string for Database1");
}
else{
    db = new Database2("Connection string for Database2");
}

var result = db.Table1.Where(a=>a.Value==1).First();

如何进行上述工作,以便我可以从两个不同的数据库(取决于“模式”)分配“结果”,而无需为“结果”编写两个不同的定义?

4

2 回答 2

3

将连接字符串单独存储在配置文件中。然后,您可以在运行时交换连接字符串以将数据库对象指向正确的数据库:

if(mode == "PRODUCTION")
{
    db = new Database(ConfigurationManager.ConnectionStrings["production-key"]);
}
else
{
    db = new Database(ConfigurationManager.ConnectionStrings["dev-key"]);
}
于 2013-03-20T20:55:37.777 回答
2

贾斯汀的观点很好,这是另一个——

为什么要在数据库级别这样做?

像这样的东西会起作用

var table;

if(mode == "PRODUCTION"){
    db = new Database1("Connection string for Database1");
    table = db.table1;
}
else{
    db = new Database1("Connection string for Database2");
    table = db.table1
}

var result = table.Where(a=>a.Value==1).First();

如果您没有完全相同的 db,那么您将需要执行类似的操作(您还可以向 db1 和 db2 添加一个接口以返回 commonElements - 如您所愿。

class commonElements {
   /// some code
}

public commoneElements GetCommon(Database1 inDB1) {
   /// some code
}

public commoneElements GetCommon(Database2 inDB2) {
   /// some code
}

commonElements common;
if(mode == "PRODUCTION"){
    db1 = new Database1("Connection string for Database1");
    common = GetCommon(db1);
}
else{
    db2 = new Database2("Connection string for Database2");
    common = GetCommon(db2);
}

var result = common.Where(a=>a.Value==1).First();
于 2013-03-20T20:57:39.660 回答