编写可以处理多个数据库对象的代码
本文关键字:数据库 对象 代码 处理 | 更新日期: 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();