我是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中有一个选项来衡量这两个任务的性能?感谢您抽出时间回答。
答案 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
类。