EF Core 2.1更新相关实体的查询效率

时间:2018-08-06 14:41:47

标签: entity-framework asp.net-web-api asp.net-core-2.0 ef-core-2.1

我有一个学生模型,其中有电话号码和地址列表。当我更新学生时,需要更新相关数据(电话和地址)。为此,我在学生控制器中编写了一个PUT操作。它工作正常,但我担心查询的效率。请检查代码并建议我即兴创作。谢谢

String.prototype.toObject = function(l1, l2) {

  var obj = {};

  this.split(l1).map(o => {
    var el = o.split(l2);
    obj[el[0]] = el[1];
  })

  return obj;

}

var hashString = "model,5;month,10;year,2018";
var hashString2 = "model=5-month=10-year=2018";

console.log(hashString.toObject(";", ","))

console.log(hashString2.toObject("-", "="))

1 个答案:

答案 0 :(得分:0)

通常不必担心搜索较小的内存集合。因此,如果一个学生有数十个或数百个地址,则重复查找将不会很重要,尤其是与写入数据库所需的时间相比。

如果确实要优化,则可以将学生的地址复制到词典中。像这样:

    var existingAddresses = p.Addresses.ToList();
    var studentAddresses = student.Addresses.ToDictionary(i => i.Id);
    foreach (var existingAddress in existingAddresses)
    {
        if (studentAddresses.TryGetValue(existingAddress.Id, out Address address))
        {
            _Context.Entry(existingAddress).CurrentValues.SetValues(address);
        }
        else
        {
            _Context.Remove(existingAddress);
        }
    }

对这样的内存集合的查询:

var address = student.Addresses.SingleOrDefault(i => i.Id == existingAddress.Id);

只会简单地遍历所有学生。地址会比较ID。 Dictionary <>就像索引一样,提供了非常快速的查找。