我基本上有两个不同的数据库,其中包含不同的表,但它们都具有完全相同结构的“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();
如何进行上述工作以便我可以从两个不同的数据库中分配“结果”(取决于“模式”),而无需为“结果”编写两个不同的定义?
答案 0 :(得分:3)
将连接字符串分别存储在配置文件中。然后,您可以在运行时交换连接字符串,以将数据库对象指向正确的数据库:
if(mode == "PRODUCTION")
{
db = new Database(ConfigurationManager.ConnectionStrings["production-key"]);
}
else
{
db = new Database(ConfigurationManager.ConnectionStrings["dev-key"]);
}
答案 1 :(得分:2)
贾斯汀的观点是好的,这是另一个 -
为什么这在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();