如何解决EF如何创建用500万行更新SQLite表中的100万行所需的SQL?它会一排更新吗?
当我想使用EntityFrameworkCore时,如果我进行更新。例如,将表中具有“ A”类型的每一行更新为具有“ Type A”名称,那么EF如何处理该行?
public class Deck
{
public string DeckGuid { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}
EF是否要在每一行中进行检索或导致对其进行检索,然后选择Type =“ A”的那些,然后逐个更新它们?
我还有其他不同的编码方式来编码更新,例如,如果有一百万行需要更新,那么它就不会一一列出?
如果只更新一行并且Type列上有一个索引,该怎么办?有没有考虑到这一点?
解决方法
看看this EF扩展名。通过EF处理大量数据时,此功能非常有用。 您的更新方案示例(来自他们的文档):
//Delete
context.Items.Where(a => a.ItemId > 500).BatchDelete();
context.Items.Where(a => a.ItemId > 500).BatchDeleteAsync();
// Update (using Expression arg.) supports Increment/Decrement
context.Items.Where(a => a.ItemId <= 500).BatchUpdate(a => new Item { Quantity = a.Quantity + 100 });
// can be as value '+100' or as variable '+incrementStep' (int incrementStep = 100;)
// Update (via simple object)
context.Items.Where(a => a.ItemId <= 500).BatchUpdate(new Item { Description = "Updated" });
context.Items.Where(a => a.ItemId <= 500).BatchUpdateAsync(new Item { Description = "Updated" });
// Update (via simple object) - requires additional Argument for setting to Property default value
var updateColumns = new List<string> { nameof(Item.Quantity) }; // Update 'Quantity' to default value('0'-zero)
var q = context.Items.Where(a => a.ItemId <= 500);
int affected = q.BatchUpdate(new Item { Description = "Updated" },updateColumns);//result assigned to variable
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。