循环中的实体框架连接

本文关键字:框架 连接 实体 循环 | 更新日期: 2023-09-27 18:19:47

我有一个名为IDsList的整数列表,用于使用实体框架连接从名为MyTbl的表中提取XML字符串列表。XML字符串随后被用于执行其他任务。以下哪项比较好?

方法1

var IDsList = new List<Int32> () {17, 23, 47, 62, 63, 79, 85, 91, 100}; // user input
List<String> XMLStrs = null;
using (var ctx = new DatabaseEntities ()) {
    XMLStrs = IDsList.Select (i => Ctx.MyTbl.First (tr => tr.id == i).xml_str).ToList ();
}
XMLStrs.AsParallel ().ForAll (xs => {
    // Do something in parallel
});

方法2

var IDsList = new List<Int32> () {17, 23, 47, 62, 63, 79, 85, 91, 100}; // user input
IDsList.AsParallel ().ForAll (i => {
    using (var ctx = new DatabaseEntities ()) {
        var xs = ctx.MyTTbl.First (tr => tr.id == i).xml_str;
        // Do something with xs
    }
});

或者有没有一种更惯用的C#方法?

请注意IDsList通常是一个更长的列表,长度通常为数千。对xs的特定值执行每一次单独的操作所花费的时间与其他操作大致相同。

循环中的实体框架连接

如果您试图使用EF 4.1获取IDsList中存在ID的行,您可以使用。包含在您的查询中:

var IDsList = new []{17, 23, 47, 62, 63, 79, 85, 91, 100}; // user input
List<string> XMLStrs = null;
using (var ctx = new DatabaseEntities()) 
{
    XMLStrs = (from tr in Ctx.MyTbl
               where IDsList.Contains(tr.id)
               select tr.xml_str).ToList();
}