0

我想使用 linq 使用位于不同服务器中的多个数据库。

我是新手。请任何人帮助我。

我在一张表中拥有我想要的所有连接字符串。动态地,我想使用 linq 访问不同的数据库。可能吗?

这是我的代码:

for (int i = 0; i < chkSchool.Items.Count; i++)
{
      if (chkSchool.Items[i].Selected)
      {
           school = com.GetSchoolNames(chkType.SelectedItem.ToString(), chkSchool.Items[i].Text);
           foreach (var item in school.ToList())
           {
               entity.dbconnection = item.DatabaseConn;
               Session["dbconnection"] = entity.dbconnection;
           }
           string news = data.GetNews(Convert.ToInt32(chkYear.SelectedItem.ToString()));
           string result = data.GetResult(chkYear.SelectedItem.ToString());
     }
}

每个学校都有不同的数据库连接。

提前致谢。

4

1 回答 1

1

您所描述的内容在 LINQ to SQL 或 LINQ to Entities 中是不可能的。DataContext并且DbContext在实例化它们时只能针对单个数据库。您必须创建另一个针对不同数据库的实例,但这是检索到的实体之间的一种断开连接的方法。

我实现这一目标的唯一方法是让一个中央数据库使用同义词引用所有数据库中的所有表。有了这个,您可以定位中央数据库,这将影响您跨数据库的所有表。同义词的好处是您可以执行所有 CRUD 操作,并将它们分派到真实表。实际上,您可以使用同义词(表、视图、函数、存储过程)映射任何对象,并将它们组合到一个数据库中。也可以像在 SSMS 中那样对跨数据库的不同表中的表执行连接查询。

现在,如果您的所有数据库都具有相同的结构,您将遇到问题。这种方法适用于具有不同结构的数据库,并且您希望从业务角度使这些结构相互交流。

希望这可以帮助。

更新: 假设你有DB1.dbo.Products桌子DB2.dbo.Shipments。如您所见,它们存在于 2 个不同的数据库中。我正在谈论的解决方案需要第三个数据库(ALL_DBs),您可以在上面为上面的 2 个表创建同义词,如下所示:

USE ALL_DBs
CREATE SYNONYM dbo.Products FOR DB1.dbo.Products
CREATE SYNONYM dbo.Shipments FOR DB2.dbo.Shipments

正如您所看到的,数据仍然存储在其中DB1DB2但是如果您定位,您可以从相同的上下文中访问它们,ALL_DBs因为它具有指向其他数据库中其他对象的指针。现在您可以有一个 DbContext 或 DataContext 指向ALL_DBs并且您将能够同时查询两个表。

于 2013-04-11T14:33:14.843 回答