实体框架:更新大量表记录的更好方法

时间:2014-03-02 20:06:02

标签: entity-framework entity-framework-6

我是Entity框架的新手,很好奇用新数据记录更新所有表的最佳方法是什么。我有一个方法,它返回具有更新记录的对象列表。大多数信息保持不变;只会更新两个字段。 目前我创建了两种方法来进行更新。 第一个是从数据库表中获取数据并从Lists迭代以找到匹配并更新匹配:

var previousDatafromTable= db.Widgets.ToList();
var newDataReturnedFromMethod =.......

            foreach (var d in previousDatafromTable)
            {
                foreach (var l in newDataReturnedFromMethod )
                {
                    if (d.id == l.id)
                    {
                        d.PositionColumn = l.PositionColumn;
                        d.PositionRow = l.PositionRow;

                    }
                }

第二个是:

 foreach (var item in newDataReturnedFromMethod )
            {
                var model = db.Widgets.Find(item.id);                
                model.PositionColumn = item.PositionColumn;
                model.PositionRow = item.PositionRow;              
            }

我正在迭代更新的数据并按ID更新我的数据库表。

所以我有兴趣知道哪种方法是更好的方法,也许在Entity Framework中有一个选项来衡量这两个任务的性能?感谢您抽出时间回答。

1 个答案:

答案 0 :(得分:2)

两者都没有效率。

对于newDataReturnedFromMethod的每次迭代,第一个选项循环遍历previousDatafromTable。这是很多迭代。

第二个选项可能会为newDataReturnedFromMethod的每次迭代执行数据库查询。

加入效率要高得多:

var query = from n in newDataReturnedFromMethod
            join p in previousDatafromTable on n.id equals p.id
            select new { n,p };

foreach (var pair in query)
{
    pair.p.PositionColumn = pair.n.PositionColumn;
    pair.p.PositionRow = pair.n.PositionRow;              
}

EF没有内置的性能测量。您通常会使用分析器或StopWatch类。