深入解析EF Core 7.0 ExecuteUpdate方法:LINQ查询与批量修改的完美结合

全国数字货币钱包安装地址:tp9.app,bit16.app,tp784.app,tp888.app,im784.app,im45.app,tokenn.app,imtooken.app,imgw.app,imtom.vip,imtokemn.app,im116.app,imtokne.app,immtoken.app,im钱包.com,imtkem.app,tokim.app,im87.app,tptoka.app,tp钱包.cn,im112.app,im1.app,bitpia.app,imzg.app,imkem.vip,im70.app,im003.app,im82.app,tokim.app,imqb.app,tookeni.app,a471.cc,tokne.app,tokonii.app,imtokes.app,im1122.app,imkct.app,imkd.app,imkct.app,imtek.app,im22.im,imken.app ,tp114.app,bit114.app,imkenn.app,tp115.app,bit115.app,im221.cn,im888.app

数据库操作中,提高数据修改效率是一大关键问题。EF Core 7.0的ExecuteUpdate方法,将LINQ查询与批量修改功能融合,有效降低了数据库的交互次数,对开发者而言,这一特性颇具吸引力。

EF Core 7.0新特性

项目中,数据更新速度缓慢,若当时能运用这个新方法,效率将大大提升。EF Core 7.0版本引入的ExecuteUpdate方法,有效减少了数据库的往返次数,降低了更新过程中的时间消耗和人力成本。这使得开发者在处理大量数据更新时,能够更加高效地完成任务。

在大型企业中,诸如亚马逊仓库管理系统这样的项目,它们处理的数据量庞大。如果数据更新不够高效,那么由此造成的损失将是巨大的,难以准确计算。

数据批量更新的意义

大量更新显得尤为关键。以往,每次对数据进行修改,都必须与数据库进行一次交流。以一家拥有1万条银行分行信息的银行为例,若逐个对分行的状态等数据进行更新,那么就需要进行1万次的数据交互。这样的操作在时间上可能需要数小时之久。

若实行批量更新,往往只需几次操作即可完成。比如,在处理北京某银行的分行数据时,通过批量更新,原本需要耗时的工作可以在几分钟内完成,大大节省了时间和计算资源。

public async Task<int> UpdateBranchSingleTable()
{
    return await _context.Set<Branch>()
            .Where(b => b.IsDeleted == true)
            .ExecuteUpdateAsync(b => b.SetProperty(p => p.Name, m => "Decommissioned" +  m.Name + "!"));    
}

单表操作示例

UPDATE [t]
	SET [t].[Name] = (N'Decommissioned' + [t].[Name]) + N'!'
	FROM [tt_branch] AS [t]
WHERE [t].[IsDeleted] = CAST(1 AS bit)

在进行单表操作时,存在一定的操作规则。以银行分行的数据表为例,若需处理那些已关闭的分行,即IsDeleted字段值为真的分行,我们需要在其名称前加上“已停用”字样。这类大规模的更新操作,正是ExecuteUpdate功能得以发挥效用的场景。

我在上海一家金融机构工作,曾遇到过类似任务。那时,我需要修改上千个已终止项目的名称。若非有批量操作功能,就得一个一个地手动修改,效率极低。有了这个功能,我就能快速完成,大大提升了工作效率。

多项操作通常较为繁琐。以查询具备外币交易功能的ATM机所属的分行为例,需在分行名称前标注其支持外币业务。这需要先建立分行信息表与ATM机信息表之间的联系,进而识别出哪些分行拥有支持外币交易功能的ATM机。

 public async Task<int> UpdateBranchFormMultipleTable()
 {
     return await _context.Set<Branch>()
              .Where(b => b.IsDeleted == false && b.Atms.Any(a => a.SupportForeignCurrency == true))
              .ExecuteUpdateAsync(b => b.SetProperty(p => p.Name, m => "Global Service " + m.Name));    
  }

在广州某跨国银行分行的系统升级工程中,我们遇到了类似的情况。那时,我们必须对特定分行进行标记。为了顺利完成这项任务,我们查阅了EF Core的相关文档。最终,通过关联查询和批量更新,我们大大减轻了开发负担。

查看那些职位为Branch Manager的分行信息,然后在这些分行的名称前添加Level 2标记。这同样是一个关联查询后的批量修改任务。在执行此操作时,需要连接分行表和分行经理表进行查询。

 public async Task<int> UpdateBranchMultipleTables() {
     return await _context.Set<Branch>()
             .Where(b => b.IsDeleted == false && b.Manager.Title == "BranchManager")
             .ExecuteUpdateAsync(b => b.SetProperty(p => p.Name, m => "Level 2" + m.Name));
 }

在一家小银行进行系统更新时,我们遇到了类似的需求。原以为需要亲自编写复杂的SQL语句,但后来发现,EF Core 7.0的ExecuteUpdate功能可以轻松解决这一问题。

从这个案例中可以看出,这种方法在处理涉及多个表格之间的关联操作上显得格外便捷。

UPDATE [t]
 	SET [t].[Name] = N'Level 2' + [t].[Name]
 	FROM [tt_branch] AS [t]
 	INNER JOIN [tt_user] AS [t0] ON [t].[Id] = [t0].[Id]
WHERE [t].[IsDeleted] = CAST(0 AS bit) AND [t0].[Title] = N'BranchManager'

对比半自动ORM框架

众人常感疑惑,与Dapple这类半自动ORM框架相较,究竟如何?实际上,经过联合查询操作后的筛选与修改,若手动编写SQL语句,其效果与EF Core 7.0自动生成的结果并无二致。

我之前对比了两种不同的实现方法,经过反复测试,发现它们在数据精确度和执行速度上基本持平。不过,使用EF Core 7.0进行开发更为简便,无需过多忧虑SQL语句的正确性。

现在对EF Core 7.0的ExecuteUpdate方法有了诸多认识。在开发过程中,大家是否会倾向于优先使用这个方法?期待大家点赞、转发此篇文章,并在评论区交流看法。

public class Entity
{
	 [Key]
	 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
	 public int Id { get; set; }
	 [Timestamp]
	 public byte[]? Rowversion { get; set; }
	 public bool IsDeleted { get; set; }
}
 [Table("tt_branch")]
  public class Branch : Entity
  {
     [Required]
     public string Name { get; set; } = string.Empty;
     [Required]
     public string Address { get; set; } = string.Empty;
     [Required]
     public bool hasCreditCardService { get; set; } = false;
     [Required]
     public bool hasChequeService { get; set; } = false;
     public ICollection<ATM> Atms { get; } = new List<ATM>();
     public User Manager { get; set; } = null!;
}
public abstract class BankDevice : Entity
{
	 [Required]
	 public string Name { get; set; } = string.Empty;
	 [Required]
	 public DeviceStatus DeviceStatus { get; set; } = DeviceStatus.Running;
 }
 [Table("tt_atm")]
 public class ATM : BankDevice
 {
     [Required]
     public bool SupportForeignCurrency { get; set; } = false;
 }
public enum DeviceStatus
{
    Running = 1,
    Standby,
    Maintance
}
[Table("tt_user")]
public class User:Entity
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Title { get; set; }
    public Branch Branch { get; set; } = null!;
}

全国数字货币钱包安装地址:tp9.app,bit16.app,tp784.app,tp888.app,im784.app,im45.app,tokenn.app,imtooken.app,imgw.app,imtom.vip,imtokemn.app,im116.app,imtokne.app,immtoken.app,im钱包.com,imtkem.app,tokim.app,im87.app,tptoka.app,tp钱包.cn,im112.app,im1.app,bitpia.app,imzg.app,imkem.vip,im70.app,im003.app,im82.app,tokim.app,imqb.app,tookeni.app,a471.cc,tokne.app,tokonii.app,imtokes.app,im1122.app,imkct.app,imkd.app,imkct.app,imtek.app,im22.im,imken.app ,tp114.app,bit114.app,imkenn.app,tp115.app,bit115.app,im221.cn,im888.app

波宝钱包app下载
作者头像
波宝钱包app官网创始人

波宝钱包app官方

  • 波宝钱包(Bibox Wallet)作为一个多功能的数字资产管理工具,致力于为用户提供安全、便捷、高效的加密货币管理和交易服务。波宝钱包设计简洁直观,即使是加密货币新手也能轻松上手。所有功能都经过精心设计,用户可以迅速找到所需的服务,例如存储、发送或交易数字资产。
  • 版权声明:本站文章如无特别标注,均为本站原创文章,于2024-12-20,由波宝钱包app官网发表,共 4967个字。
  • 转载请注明出处:波宝钱包app官网,如有疑问,请联系我们
  • 本文地址:https://shandong.lyyysc.cn/boba/668.html
上一篇:深入解析CNMC数字资产代币:恒星合约的加密货币与区块链技术应用
下一篇:国内商品期货交易所考虑暂停黑色系商品夜盘交易,上期所正在评估效果

相关推荐