2013-03-20 51 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

相關問題