我有我的模型根据字典形式进来的一些信息更新数据库。我现在做的方式是如下:数据库更新字典/列表速度
SortedItems = db.SortedItems.ToList();
foreach (SortedItem si in SortedItems)
{
string key = si.PK1 + si.PK2 + si.PK3 + si.PK4;
if (updates.ContainsKey(key) && updatas[key] != si.SortRank)
{
si.SortRank = updates[key];
db.SortedItems.ApplyCurrentValues(si);
}
}
db.SaveChanges();
难道是更快的通过字典迭代,并为每个项目做一个数据库查询?字典只包含已更改的项目,并且可以是从2项目到整个集合的任何地方。我对替代方法的想法是:
foreach(KeyValuePair<string, int?> kvp in updates)
{
SortedItem si = db.SortedItems.Single(s => (s.PK1 + s.PK2 + s.PK3 + s.PK4).Equals(kvp.Key));
si.SortRank = kvp.Value;
db.SortedItems.ApplyCurrentValues(si);
}
db.SaveChanges();
编辑:假设更新的数量通常是DB的约5-20%entires
要记住的主要事情是,您的数据库调用的可能性比字典查找要慢。因此,如果可能的话,您想尽量减少数据库交互(作为一般经验)。 –