2013-03-20 46 views
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(); 

我怎样才能让上面的工作,所以我可以从两个不同的数据库分配“结果”(根据“模式”),而无需编写两个不同的定义为“结果”?

+1

如果你找到一个解决方案也不会是安全的,因为这些表的结构可以独立改变 – djechlin 2013-03-20 20:55:58

+0

可以共享类'Database1'和'Database2' – 2013-03-20 20:59:24

回答

3

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

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

我。? (有限)对linq-to-sql的理解告诉了我您需要指定正在实例化的数据库的类型。所以就像var db = db1(connectionString)将需要一个db1特定的连接字符串。我错了吗? – sooprise 2013-03-20 20:57:00

+0

@sooprise - 情况并非如此。如果数据库具有相同的模式,则可以使用相同的类型并仅交换连接字符串。 – 2013-03-20 20:58:32

+0

“相同模式”是指两个完全相同的表都具有相同结构的数据库? – sooprise 2013-03-20 21:01:00

2

Justin的点是好的,这里是另一个 -

为什么这样做的分贝水平?

像这样的工作

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

如果你没有完全相同的分贝,那么你就需要做这样的事情(你也可以将接口加入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(); 
+2

'var table;'无效。 'table'是什么类型?即使定义相同,两个数据上下文对于table1也会有不同的类。 – Blorgbeard 2013-03-20 20:58:12

+0

@Blorgbeard--是的,我喜欢Justin假设两个dbs使用相同的对象类型,如果它们是相同的。如果不是,那么需要实现一个通用的存取函数,参见编辑 – Hogan 2013-03-20 21:03:14

相关问题