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

.NET对接MySQL删除empresas数据外键约束失败报错如何解决?

错误原因

该报错是由于待删除的empresa主表记录存在关联的qsa从表数据,外键约束默认禁止直接删除主表数据,避免从表出现无主的外键字段。

解决方案(级联删除,适合Qsa数据随Empresa一同删除的业务场景)

  1. 补全Qsa模型的关联字段,匹配数据库中已存在的外键关系
public class Qsa
{
    [Key]
    public string Nome { get; set; }
    public string Qual { get; set; }
    // 新增外键字段,对应数据库里的EmpresaCnpj
    public string EmpresaCnpj { get; set; }
    // 配置外键关联
    [ForeignKey(nameof(EmpresaCnpj))]
    public Empresa Empresa { get; set; }
}
  1. 调整DbContext配置,开启级联删除
    取消原有注释的代码,将删除行为从Restrict改为Cascade:
public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
    {
        Database.EnsureCreated();
    }
    public DbSet<Empresa> Empresa { get; set; }
    // 取消Qsa DbSet的注释
    public DbSet<Qsa> Qsa { get; set; }
    //public DbSet<Atividade> Atividade { get; set; }

    // 取消OnModelCreating的注释
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        foreach (var foreignKey in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
        {
            // 将Restrict改为Cascade开启级联删除
            foreignKey.DeleteBehavior = DeleteBehavior.Cascade;
        }
        base.OnModelCreating(modelBuilder);
    }
}
  1. 修改删除逻辑,提前加载关联的Qsa数据,触发EF Core的级联删除逻辑
var empresa = await _context.Empresa
    // 加载关联的Qsa数据
    .Include(e => e.Qsa)
    .FirstOrDefaultAsync(e => e.Cnpj == id);

修改完成后执行EF Core迁移命令更新数据库,配置即可生效。

可选方案(手动删除关联数据,无需修改全局删除规则)

如果不想开启全局级联删除,可以在删除Empresa前手动删除关联的Qsa记录:

if (empresa == null)
{
    TempData["msg"] = "Este CNPJ não está cadastrado";
    return RedirectToAction("Delete");
}
// 先删除所有关联的Qsa数据
var relatedQsa = _context.Qsa.Where(q => q.EmpresaCnpj == id);
_context.Qsa.RemoveRange(relatedQsa);
// 再删除Empresa记录
_context.Empresa.Remove(empresa);
await _context.SaveChangesAsync();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:45:04