我想使用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());
}
}
每所学校都有不同的数据库连接。
提前致谢。
答案 0 :(得分:1)
从LINQ to SQL或LINQ to Entities中无法实现所描述的内容。 DataContext
和DbContext
只能在实例化时定位单个数据库。您必须创建另一个针对不同数据库的实例,但这是检索到的实体之间的断开连接方法。
我实现这一目标的唯一方法是让中央数据库通过使用同义词引用所有数据库中的所有表。有了这个,您可以定位中央数据库,这将覆盖数据库中的所有表。关于同义词的好处是它们可以执行所有CRUD操作并将它们分派到真实表中。您实际上可以使用同义词(表,视图,函数,存储过程)映射任何对象,并将它们组合到一个数据库中。
也可以像在SSMS中那样在DB上的不同表中的表上执行连接。现在,如果所有数据库都具有相同的结构,则会遇到问题。这种方法适用于具有不同结构的数据库,并且您希望从业务角度使结构相互通信。
希望这有帮助。
更新:
假设您有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
正如您所看到的,数据仍存储在DB1
和DB2
中,但如果您定位ALL_DBs
,则可以从同一上下文访问它们,因为它有指向其他对象的指针数据库。
现在,您可以将单个DbContext或DataContext指向ALL_DBs
,并且您可以同时查询这两个表。