2015-07-12 122 views
0

即时通讯使用实体框架6代码优先与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); 
    } 
} 

我想,当我删除实体“Cliente” EF删除所有相关实体“Cotizacion” .The级联删除只有当我加载失败在上下文中列出Cotizaciones,但是当我不在上下文中加载Cotizaciones列表时,级联删除可以正常工作。

我收到以下错误:

{"Cannot add or update a child row: a foreign key constraint fails (\"pruebaentity\".\"cotizacion\", CONSTRAINT \"FK_Cotizacion_Cliente_ClienteId\" FOREIGN KEY (\"ClienteId\") REFERENCES \"cliente\" (\"ClienteId\") ON DELETE CASCADE ON UPDATE CASCADE)"}

回答

0

解决: 问题是,我用的

context.Clients.Remove(entity) 

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

代替