⭐️ Furion v4 版本支持【所有历史版本】无缝升级,一套代码兼容 .NET 5+ ⭐️
Skip to main content

9.6 更新操作

功能移除声明

以下内容包含 Exists 单词的在 Furion 2.6.0 + 版本中已移除。

9.6.1 更新全部列(不立即提交)

// ==== 同步操作 ====// 示例一repository.Update(user);// 示例二user.Update();// 示例三repository.ChangeEntityState(user, EntityState.Modified);// 示例四repository.Entities.Update(user);// ==== 异步操作 ====// 示例一await repository.UpdateAsync(user);// 示例二await user.UpdateAsync();

9.6.2 更新全部列(立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateNow(user);// 示例二user.UpdateNow();// ==== 异步操作 ====// 示例一await repository.UpdateNowAsync(user);// 示例二await user.UpdateNowAsync();

9.6.3 更新部分列(不立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateInclude(user, new[] {"Age", "Name"});// 示例二repository.UpdateInclude(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三repository.UpdateInclude(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// 示例四user.UpdateInclude(new[] {"Age", "Name"});// 示例五user.UpdateInclude(new[] {nameof(User.Name), nameof(User.Age)});// 示例六user.UpdateInclude(new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// ==== 异步操作 ====// 示例一await repository.UpdateIncludeAsync(user, new[] {"Age", "Name"});// 示例二await repository.UpdateIncludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三await repository.UpdateIncludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// 示例四await user.UpdateIncludeAsync(new[] {"Age", "Name"});// 示例五await user.UpdateIncludeAsync(new[] {nameof(User.Name), nameof(User.Age)});// 示例六await user.UpdateIncludeAsync(new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值

9.6.4 更新部分列(立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateIncludeNow(user, new[] {"Age", "Name"});// 示例二repository.UpdateIncludeNow(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三repository.UpdateIncludeNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// 示例四user.UpdateIncludeNow(new[] {"Age", "Name"});// 示例五user.UpdateIncludeNow(new[] {nameof(User.Name), nameof(User.Age)});// 示例六user.UpdateInclude(new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// ==== 异步操作 ====// 示例一await repository.UpdateIncludeNowAsync(user, new[] {"Age", "Name"});// 示例二await repository.UpdateIncludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三await repository.UpdateIncludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// 示例四await user.UpdateIncludeNowAsync(new[] {"Age", "Name"});// 示例五await user.UpdateIncludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)});// 示例六await user.UpdateIncludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值

9.6.5 排除特定列更新(不立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateExclude(user, new[] {"Age", "Name"});// 示例二repository.UpdateExclude(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三repository.UpdateExclude(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// 示例四user.UpdateExclude(new[] {"Age", "Name"});// 示例五user.UpdateExclude(new[] {nameof(User.Name), nameof(User.Age)});// 示例六user.UpdateExclude(new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// ==== 异步操作 ====// 示例一await repository.UpdateExcludeAsync(user, new[] {"Age", "Name"});// 示例二await repository.UpdateExcludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三await repository.UpdateExcludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// 示例四await user.UpdateExcludeAsync(new[] {"Age", "Name"});// 示例五await user.UpdateExcludeAsync(new[] {nameof(User.Name), nameof(User.Age)});// 示例六await user.UpdateExcludeAsync(new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值

9.6.6 排除特定列更新(立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateExcludeNow(user, new[] {"Age", "Name"});// 示例二repository.UpdateExcludeNow(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三repository.UpdateExcludeNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// 示例四user.UpdateExcludeNow(new[] {"Age", "Name"});// 示例五user.UpdateExcludeNow(new[] {nameof(User.Name), nameof(User.Age)});// 示例六user.UpdateExcludeNow(new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// ==== 异步操作 ====// 示例一await repository.UpdateExcludeNowAsync(user, new[] {"Age", "Name"});// 示例二await repository.UpdateExcludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三await repository.UpdateExcludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// 示例四await user.UpdateExcludeNowAsync(new[] {"Age", "Name"});// 示例五await user.UpdateExcludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)});// 示例六await user.UpdateExcludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值

9.6.7 数据存在才更新所有列(不立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateExists(user);// ==== 异步操作 ====// 示例一await repository.UpdateExistsAsync(user);

9.6.8 数据存在才更新所有列(立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateExistsNow(user);// ==== 异步操作 ====// 示例一await repository.UpdateExistsNowAsync(user);

9.6.9 数据存在才更新部分列(不立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateIncludeExists(user, new[] {"Age", "Name"});// 示例二repository.UpdateIncludeExists(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三repository.UpdateIncludeExists(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// ==== 异步操作 ====// 示例一await repository.UpdateIncludeExistsAsync(user, new[] {"Age", "Name"});// 示例二await repository.UpdateIncludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三await repository.UpdateIncludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值

9.6.10 数据存在才更新部分列(立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateIncludeExistsNow(user, new[] {"Age", "Name"});// 示例二repository.UpdateIncludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三repository.UpdateIncludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// ==== 异步操作 ====// 示例一await repository.UpdateIncludeExistsNowAsync(user, new[] {"Age", "Name"});// 示例二await repository.UpdateIncludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三await repository.UpdateIncludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值

9.6.11 数据存在才排除特定部分列更新(不立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateExcludeExists(user, new[] {"Age", "Name"});// 示例二repository.UpdateExcludeExists(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三repository.UpdateExcludeExists(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// ==== 异步操作 ====// 示例一await repository.UpdateExcludeExistsAsync(user, new[] {"Age", "Name"});// 示例二await repository.UpdateExcludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三await repository.UpdateExcludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值

9.6.12 数据存在才排除特定部分列更新(立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateExcludeExistsNow(user, new[] {"Age", "Name"});// 示例二repository.UpdateExcludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三repository.UpdateExcludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值// ==== 异步操作 ====// 示例一await repository.UpdateExcludeExistsNowAsync(user, new[] {"Age", "Name"});// 示例二await repository.UpdateExcludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)});// 示例三await repository.UpdateExcludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true);  // 忽略空值

9.6.13 更新多条记录(不立即提交)

// ==== 同步操作 ====// 示例一repository.Update(user, user2);// 示例二repository.Update(new List<User> { user, user2 });// 示例三repository.Update(new[] {user, user2 });// ==== 异步操作 ====// 示例一await repository.UpdateAsync(user, user2);// 示例二await repository.UpdateAsync(new List<User> { user, user2 });// 示例三await repository.UpdateAsync(new[] {user, user2 });

9.6.14 更新多条记录(立即提交)

// ==== 同步操作 ====// 示例一repository.UpdateNow(user, user2);// 示例二repository.UpdateNow(new List<User> { user, user2 });// 示例三repository.UpdateNow(new[] {user, user2 });// ==== 异步操作 ====// 示例一await repository.UpdateNowAsync(user, user2);// 示例二await repository.UpdateNowAsync(new List<User> { user, user2 });// 示例三await repository.UpdateNowAsync(new[] {user, user2 });
小知识

所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChangesSaveChangesAsync

9.6.15 忽略空值更新

默认情况下,EFCore 更新会更新全部列(除实体跟踪方式以外),有些时候我们希望 Null 值无需更新,这是我们只需要在更新时候配置 ignoreNullValues 参数即可,如:

repository.Update(entity, ignoreNullValues: true);

也可以全局配置,在 AppDbContext 的派生类的构造函数中启用即可:

using Furion.DatabaseAccessor;using Microsoft.EntityFrameworkCore;namespace Furion.EntityFramework.Core{    [AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]    public class DefaultDbContext : AppDbContext<DefaultDbContext>    {        public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)        {            InsertOrUpdateIgnoreNullValues = true;        }    }}

9.6.16 反馈与建议

与我们交流

给 Furion 提 Issue

演练场