C#Entity Framework什么是.Find(id)方法的时间复杂度

时间:2018-02-14 12:48:58

标签: c# performance entity-framework

.Find(id)方法的时间复杂度是多少?循环遍历id列表并使用.Find()

是一个坏主意

也可以找到'同一个查询中的多个ID?

foreach (var id in idList)
{
    var task = _model.Tasks.Find(id);
    Save(task,task.id);
}

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

根据您使用元素的方式(以及有多少元素),您可能会发现一次加载所有实体要好得多:

// given List<int> idList
var tasks = _model.Tasks.Where(x => idList.Contains(x.id))

foreach (var task in tasks)
{
    Save(task, task.id);
}

请注意Find使用主键执行Where,因此如果实体没有主键或者具有复合键,则必须小心。您也没有获得密钥类型的任何编译时安全性(即您可以将string传递给具有int PK的实体,并且仅在运行时查找。<登记/> 当然,如果列表足够大,您可以通过一次性提供所有数据来遇到OutOfMemoryException