微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF如何创建用500万行更新SQLite表中的100万行所需的SQL?它会一排更新吗?

如何解决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 举报,一经查实,本站将立刻删除。