Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编写可以处理多个数据库对象的代码_C#_Linq_Linq To Sql - Fatal编程技术网

C# 编写可以处理多个数据库对象的代码

C# 编写可以处理多个数据库对象的代码,c#,linq,linq-to-sql,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=>

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

如何使上述工作正常进行,以便在不为“结果”编写两个不同定义的情况下从两个不同的数据库(取决于“模式”)分配“结果”?

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

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

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

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

贾斯汀的观点很好,这是另一个-

为什么要在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();

贾斯汀的观点很好,这是另一个-

为什么要在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();

如果您找到解决方案,它将不安全,因为这些表的结构可以独立更改。您能否共享
数据库1
数据库2
的类?如果您找到解决方案,它将不安全,因为这些表的结构可以独立更改。您能否共享
数据库1
数据的类base2
?我对linq to sql的(有限的)理解告诉我,您需要指定正在实例化的数据库的类型将需要一个特定于db1的连接字符串。我错了吗?@sooprise-不是这样。如果数据库具有相同的架构,您可以使用相同的类型,只需交换连接字符串。通过“相同的架构”你是说两个数据库有完全相同的表,所有的表都具有相同的结构吗?@sooprise它将一直工作到你尝试访问一个不存在的表或具有不同于预期的模式的表为止。明白了,这很酷,我现在正在尝试。一旦我的代码正常工作,将“检查”解决方案。谢谢everyon.my(有限)对linq to sql的理解告诉我,您需要指定正在实例化的数据库的类型。因此,像var db=db1(connectionString)一样,将需要一个特定于db1的连接字符串。我错了吗?@sooprise-不是这样。如果数据库具有相同的架构,您可以使用相同的类型,只需交换连接字符串。通过“相同的架构”你是说两个数据库有完全相同的表,所有的表都具有相同的结构吗?@sooprise它会一直工作到你尝试访问一个不存在的表或具有与预期不同的模式的表为止。明白了,这很酷,我现在正在尝试。会“检查”吗一旦我的代码开始工作,解决方案。谢谢大家。
var table;
无效。什么类型是
table
?即使定义相同,这两个DataContext对于table1也会有不同的类。@Blorgbeard-是的,我喜欢Justin假设两个dbs使用相同的对象类型,如果它们相同。如果如果不是这样,则需要实现一个公共访问器函数。请参见编辑
var table;
无效。什么类型是
table
?即使定义相同,这两个DataContext对于table1也会有不同的类。@Blorgbeard-是的,我喜欢Justin假设两个dbs使用相同的对象类型,如果ey是相同的。如果不是,则需要实现公共访问器函数。请参见编辑