实体框架在加载实体时删除Cascade

本文关键字:实体 删除 Cascade 加载 框架 | 更新日期: 2023-09-27 18:02:23

我使用Entity Framework 6 Code first with MySQL。

我有以下实体和流畅的配置:

    public class Cotizacion
{
    public int CotizacionId             { get; set; }
    public int Numero                   { get; set; }
    public DateTime Fecha               { get; set; }
    public int? ClienteId               { get; set; }
    public Cliente Cliente              { get; set; }
    public List<ItemsCotizacion> Items  { get; set; }
}
public class Cliente
{
    public int ClienteId                    { get; set; }
    public string RazonSocial               { get; set; }
    public string Cuit                      { get; set; }
    public string Direccion                 { get; set; }
    public string Telefono                  { get; set; }
    public List<Cotizacion> Cotizaciones    { get; set; }
}
public class ConfigCliente : EntityTypeConfiguration<Cliente>
{
    public ConfigCliente()
    {
        Property(c => c.RazonSocial).IsRequired().HasMaxLength(100);
        Property(c => c.Direccion).IsOptional().HasMaxLength(100);
        Property(c => c.Cuit).IsOptional().HasMaxLength(15);
        Property(c => c.Telefono).IsOptional().HasMaxLength(100);
        HasKey(c => c.ClienteId);
        HasMany(c => c.Cotizaciones).WithRequired(cot => cot.Cliente).WillCascadeOnDelete(true);
    }
}
public class ConfigCotizacion : EntityTypeConfiguration<Cotizacion>
{
    public ConfigCotizacion()
    {
        Property(c => c.Fecha).IsRequired();
        HasRequired(c => c.Items);
        HasMany(c => c.Items).WithRequired(i => i.Cotizacion).WillCascadeOnDelete(true);
        HasRequired(c => c.Cliente).WithMany(cot => cot.Cotizaciones);
    }   
}

我想当我删除一个实体"客户端" EF删除所有相关实体"Cotizacion" .级联删除失败只有当我加载列表cotizacones在上下文中,但当我不加载cotizacones列表在上下文中,级联删除工作正常。

我得到以下错误:

{"无法添加或更新子行:外键约束失败('"pruebaentity '"。cotizacion '"'",约束'" fk_cotizacion_clientte_clientteid '" FOREIGN KEY ('" clientteid '")引用'"client '" ('" clientid '") ON DELETE ON UPDATE级联)"}

实体框架在加载实体时删除Cascade

已解决:问题是我使用了

context.Entry(entity).Sate = System.Data.Entity.EntityState.Deleted
不是

context.Clients.Remove(entity)