编写可以使用多个数据库对象的代码

时间:2013-03-20 20:53:50

标签: c# linq linq-to-sql

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

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

2 个答案:

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