问题是我无法仅使用 EF codefirst 约定执行级联删除。他们特别说:“如果依赖实体上的外键不可为空,则 Code First 会在关系上设置级联删除”
我有父实体和子实体:
[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; }
}
MS SQL Server 中的我的 AssociationPages 表如下所示:
CREATE TABLE [dbo].[AssociationPages](
[AssociationPageID] [int] IDENTITY(1,1) NOT NULL,
[AssociationId] [int] NOT NULL,
...
)
和一个 FK(但这不重要,因为 EF 有自己的约定):
ALTER TABLE [dbo].[AssociationPages] WITH CHECK ADD CONSTRAINT [FK_ChamberPages_Chambers] FOREIGN KEY([AssociationId])
REFERENCES [dbo].[AssociationSetting] ([AssociationId])
GO
所以我到处都有不可为空的 FK 但是一旦我尝试删除父 AssociationSetting 行然后得到“DELETE 语句与 REFERENCE 约束 FK_ChamberPages_Chambers 冲突。冲突发生在数据库中......,表 dbo.AssociationPages,列 AssociationId 消息”。我知道我可以在数据库内或使用 EF fluent API 设置约束,但为什么这不起作用?
谢谢你的想法!
更新
WillCascadeOnDelete() 也不起作用:(