一对多关系 - 级联删除

时间:2011-06-14 11:53:31

标签: entity-framework-4.1

我正在使用EF 4.1,我正在尝试将POCO映射到现有数据库。这是正常工作,直到我尝试删除其他项具有依赖项的项目。我想启用级联删除,这样当删除我的第一个项目时,所有依赖项也将被删除(我相信这称为级联删除)。

我尝试在OnModelCreating中启用它:

modelBuilder.Entity<Component>()
         .HasMany(c => c.Specifications)
         .WithRequired(s => s.Component)
         .Map(m => m.MapKey("ComponentId"))
         .WillCascadeOnDelete(true);

但是,我仍然得到The DELETE statement conflicted with the REFERENCE constraint例外。

数据库非常简单:

组件

ComponentId (PK)
Description

规范

SpecificationID (PK)
Description
ComponentID (FK)

我创建了以下两个类来匹配此设置:

public class Specification
{
    [Key]
    [Required]
    public int Id { get; set; }

    [MaxLength(50)]
    [Required]
    public string Description { get; set; }

    public virtual Component Component { get; set; }
}

public class Component
{
    [Key]
    [Required]
    public int Id { get; set; }

    [MaxLength(50)]
    [Required]
    public string Description { get; set; }

    public virtual ICollection<Specification> Specifications { get; set; }
}

1 个答案:

答案 0 :(得分:2)

模型中的级联删除需要在数据库中进行级联删除。如果您让EF为您重新创建数据库,它将自动设置它。如果您不能让EF这样做,那么您必须:

  1. 手动向FK添加级联删除,或
  2. 从模型中删除级联。