Asp.net EF不是级联删除

Asp.net EF不是级联删除,asp.net,.net,asp.net-mvc,entity-framework,ef-code-first,Asp.net,.net,Asp.net Mvc,Entity Framework,Ef Code First,问题是我无法仅使用EF codefirst约定执行级联删除。他们特别说: 我有父实体和子实体: [Table("AssociationPages")] public class AssociationPage { [Column("AssociationPageID"), Required, Key] public int Id { get; set; } [Required, ForeignKey("AssociationSetting")] public i

问题是我无法仅使用EF codefirst约定执行级联删除。他们特别说:

我有父实体和子实体:

[Table("AssociationPages")]
public class AssociationPage
{
    [Column("AssociationPageID"), Required, Key]
    public int Id { get; set; }

    [Required, ForeignKey("AssociationSetting")]
    public int AssociationId { get; set; }
    public virtual AssociationSetting AssociationSetting { get; set; }
}

[Table("AssociationSetting")]
public class AssociationSetting
{
    [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int AssociationId { get; set; }

    public virtual ICollection<AssociationPage> Pages { get; set; }

}
和FK(但这不重要,因为EF有自己的惯例):

所以我到处都有不可为null的FK,但一旦我尝试删除父AssociationSetting行,就会得到“delete语句与引用约束FK_ChamberPages_Chambers冲突。冲突发生在数据库…,表dbo.AssociationPages,列AssociationId消息中”。我知道我可以在数据库内部或使用EF fluent API设置约束,但为什么这不起作用?
谢谢你的想法

更新

WillCascadeOnDelete()也不起作用:(

可能是“代码优先”没有设置级联,因为您没有遵循命名约定

试试这个:

public class AssociationPage
{
  public int Id { get; set; }

  public int AssociationSettingId { get; set; }

  public virtual AssociationSetting AssociationSetting { get; set; }
}

public class AssociationSetting
{

  public int Id { get; set; }

  public virtual ICollection<AssociationPage> Pages { get; set; }

}
公共类关联页面
{
公共int Id{get;set;}
公共int AssociationSettingId{get;set;}
公共虚拟关联设置关联{get;set;}
}
公共类关联设置
{
公共int Id{get;set;}
公共虚拟ICollection页{get;set;}
}

好的,出于调查目的,我创建了一个最简单的父子表,放置了两行-每个表一行,在级联删除上创建了FK关系作为“无操作”,并编写了EF代码优先实体。
然后我通过列属性、Fluent API和显式指定WillDeleteOnCascade()来设置FK关系变量方法,但在尝试删除父行时运气不佳。在删除之前检索父记录和子记录时,我实现这一目标的唯一方法是。此时,SQL profiler显示父表和子表的行都被逐个删除。

综上所述,我认为EF代码中的层叠首先意味着EF创建的数据库上的设置约束。我可能遗漏了一些东西。

Shiraz,这是什么意思?这是您的代码被重写为使用约定而不是属性。这没有帮助,不幸的是,层叠删除发生在您在我的机器上的代码,使用VS2012、EF4,并让数据库由codefirst自动生成。您是否以“正常”方式删除,例如,
DB.AssociationSettings.Remove(settings)
?@MykWillis是的,我这样删除它。我的数据库不是从EF生成的,我之前做过,数据库的FK不是级联的(原文如此!)。我希望EF能够独立于数据库级关系维护级联删除。我错了吗?PS:我使用的是EF5、VS2012、SQL2012Express
ALTER TABLE [dbo].[AssociationPages]  WITH CHECK ADD  CONSTRAINT [FK_ChamberPages_Chambers] FOREIGN KEY([AssociationId])
REFERENCES [dbo].[AssociationSetting] ([AssociationId])
GO
public class AssociationPage
{
  public int Id { get; set; }

  public int AssociationSettingId { get; set; }

  public virtual AssociationSetting AssociationSetting { get; set; }
}

public class AssociationSetting
{

  public int Id { get; set; }

  public virtual ICollection<AssociationPage> Pages { get; set; }

}