编写可以处理多个数据库对象的代码

本文关键字:数据库 对象 代码 处理 | 更新日期: 2023-09-27 18:04:52

我基本上有两个不同的数据库,其中有不同的表,但它们都有具有完全相同结构的"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();

我怎样才能使上述工作,所以我可以分配"结果"从两个不同的数据库(取决于"模式"),而不写两个不同的定义为"结果"?

编写可以处理多个数据库对象的代码

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

if(mode == "PRODUCTION")
{
    db = new Database(ConfigurationManager.ConnectionStrings["production-key"]);
}
else
{
    db = new Database(ConfigurationManager.ConnectionStrings["dev-key"]);
}

Justin的观点很好,这里还有一个-

为什么在db级别这样做?

这样就可以了

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();