You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EntityFrameworkCore.Triggered前置保存触发器中取消增改操作

解决EntityFrameworkCore.Triggered中取消插入/更新操作的方法

要在firstName.Length > 1 && lastName.Length > 1不满足时取消对应的插入或更新操作,你可以通过抛出验证异常的方式实现——EntityFrameworkCore.Triggered的触发器没有直接的Cancel API,抛出异常会终止当前保存流程,从而取消操作。

修改后的代码如下:

using System.ComponentModel.DataAnnotations;
using EntityFrameworkCore.Triggered;

namespace MMSP_Providers.Data.Triggers
{
    public class EnsureInterlocutorNameUniformity : IBeforeSaveTrigger<Interlocutor>
    {
        public Task BeforeSave(ITriggerContext<Interlocutor> context, CancellationToken cancellationToken)
        {
            if (context.ChangeType == ChangeType.Added || context.ChangeType == ChangeType.Modified)
            {
                string firstName = context.Entity.FirstName, lastName = context.Entity.LastName;
                
                if (firstName.Length > 1 && lastName.Length > 1)
                {
                    context.Entity.FirstName = char.ToUpper(firstName[0]) + firstName[1..];
                    context.Entity.LastName = lastName.ToUpper();
                }
                else
                {
                    // 抛出异常终止保存,取消插入/更新操作
                    throw new ValidationException("名和姓的长度必须都大于1");
                }
            }

            return Task.CompletedTask;
        }
    }
}

关键说明:

  • 使用ValidationException(来自System.ComponentModel.DataAnnotations命名空间)是符合EF Core验证逻辑的标准做法,你也可以自定义异常类型,但标准异常更便于上层统一处理。
  • 异常抛出后,EF Core会自动回滚当前的保存操作,达到取消目标操作的效果。
  • 若需更温和的错误处理,可结合DbContext.ValidationErrors集合,但触发器场景下直接抛出异常是最直接有效的方式。

内容的提问来源于stack exchange,提问作者Sharry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 04:06:21