从两个数据库中访问数据的最佳方法
本文关键字:数据 访问 最佳 方法 数据库 两个 | 更新日期: 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));