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
结尾的表示立即提交到数据库,也就是立即调用 SaveChanges
或 SaveChangesAsync
。
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。