0

基本的に、異なるテーブルを持つ2つの異なるデータベースがありますが、どちらもまったく同じ構造の「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つの異なる定義を記述せずに、2つの異なるデータベース(「モード」に応じて)から「結果」を割り当てることができるように、上記を機能させるにはどうすればよいですか?

4

2 に答える 2

3

接続文字列を構成ファイルに個別に保存します。次に、実行時に接続文字列を交換して、データベースオブジェクトが適切なデータベースを指すようにします。

if(mode == "PRODUCTION")
{
    db = new Database(ConfigurationManager.ConnectionStrings["production-key"]);
}
else
{
    db = new Database(ConfigurationManager.ConnectionStrings["dev-key"]);
}
于 2013-03-20T20:55:37.777 に答える
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();
于 2013-03-20T20:57:39.660 に答える