返回

FreeSql ORM 数据更新指南:单条、批量、返回值

见解分享

引言

数据更新是数据库操作中至关重要的环节,FreeSql ORM 秉持一贯的简洁高效理念,为开发者提供了丰富的更新数据方法,支持单条更新、批量更新,并在特定的数据库执行环境中返回更新后的记录值。

单条数据更新

1. 使用 Update 方法

Update 方法是最基本的单条数据更新方法,支持指定列进行更新操作。

// 更新指定列
await _dbContext.GetRepository<User>()
    .Update(u => new User
    {
        Name = "Jack",
        Age = 30
    })
    .Where(u => u.Id == 1)
    .ExecuteAffrowsAsync();

2. 使用 Set 方法

Set 方法可以指定多个列进行更新,更具灵活性。

// 更新多个列
await _dbContext.GetRepository<User>()
    .Update()
    .Set(u => u.Name, "Jack")
    .Set(u => u.Age, 30)
    .Where(u => u.Id == 1)
    .ExecuteAffrowsAsync();

批量数据更新

1. 使用 InsertOrUpdate 方法

InsertOrUpdate 方法可以批量更新或插入数据,如果记录存在则更新,否则插入。

// 批量更新或插入
await _dbContext.GetRepository<User>()
    .InsertOrUpdate(new[]
    {
        new User { Id = 1, Name = "Jack", Age = 30 },
        new User { Id = 2, Name = "Tom", Age = 25 }
    })
    .ExecuteAffrowsAsync();

2. 使用 UpdateRange 方法

UpdateRange 方法可以批量更新数据,要求实体对象的主键必须已设置。

// 批量更新
await _dbContext.GetRepository<User>()
    .UpdateRange(new[]
    {
        new User { Id = 1, Name = "Jack", Age = 30 },
        new User { Id = 2, Name = "Tom", Age = 25 }
    })
    .ExecuteAffrowsAsync();

返回更新值

在特定数据库(如 PostgreSQL、Oracle、DB2)中,可以使用 AsTable 方法返回更新后的记录值。

// 返回更新值
var updatedValues = await _dbContext.GetRepository<User>()
    .Update()
    .Set(u => u.Name, "Jack")
    .Set(u => u.Age, 30)
    .Where(u => u.Id == 1)
    .AsTable()
    .ToListAsync<dynamic>();

高级用法

  • 条件更新: 可以使用 Where 方法指定更新条件。
  • 使用 Include 方法: 可以在更新后包含关联实体,提高查询效率。
  • 并发控制: 可以使用 WithVersion 方法实现乐观并发控制。
  • 事务处理: 可以在一个事务中执行多个更新操作。

结语

FreeSql ORM 的数据更新功能强大而灵活,支持单条更新、批量更新,并且可以在特定的数据库中返回更新后的记录值。通过掌握这些技术,您可以轻松更新数据库数据,满足您的各种业务需求。