从两个数据库中访问数据的最佳方法

本文关键字:数据 访问 最佳 方法 数据库 两个 | 更新日期: 2023-09-27 18:16:37

我有一种情况,我需要从两个数据库访问数据如下:

TableA(ID,Name,tableB_ID,TableC_ID),TableC(ID,Name)存在于X数据库中,tableB (ID,Name)存在于Y数据库中。

我有记录从tableA,我需要改变tableA记录的名称字段与tableB的名称字段。

我通过获取记录来替换它:

List<Int> IDs=new List<int>(){1,2,3,4,5,6,7,8};
IQueryable<TableA> resultA=Xcontext.TableAs.where(t=>IDs.Contains(t.ID));
Dictionary<int,string> resultB = YContext.TableB.Where(t=>resultA.Select(a=>a.tableB_ID).Contains(t.ID));

将Name字段更改为

resultA.ToList().ForEach(a=>a.Name=resultB.FirstORDefault(r=>r.ID==a.tableB_ID))

我需要resultA As queryable所以我可以使用关联访问listView中的数据

<% Eval("TableC.Name")%>

我是否遵循了正确的方法?如果有更好的方法,请给我建议一下。

从两个数据库中访问数据的最佳方法

假设您在获取resultB (YContext)时遇到问题,因为您从不同的数据库上下文(XContext)使用Queryable:

resultB = YContext.TableB.Where(t=>resultA.Select(a=>a.tableB_ID).Contains(t.ID));

据我所知,一些Linq驱动程序不能很容易地计算IQueryable,它包含来自不同上下文的表达式。因此,在您的情况下,首先您应该从第一个上下文(resultA)获取结果,然后将其传递给第二个上下文:

List<Int> IDs=new List<int>(){1,2,3,4,5,6,7,8};
IList<TableA> resultA=Xcontext.TableAs.Where(t=>IDs.Contains(t.ID)).ToList(); //here you call ToList() that fetches the records to .net collection
//also some linq drivers are unable to parse complex expressions like Select(), so its better to move the IDs to a separate collection
var tableBIDs = resultA.Select(a=>a.tableB_ID).ToList();
var resultB = YContext.TableB.Where(t=>tableBIDs.Contains(t.ID));