問題は、EF codefirst 規則のみを使用してカスケード削除を実行できないことです。特に、「依存エンティティの外部キーが null 許容でない場合、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
したがって、どこでもnull不可のFKがありますが、親AssociationSetting行を削除しようとすると、「DELETEステートメントがREFERENCE制約FK_ChamberPages_Chambersと競合しました。データベースで競合が発生しました...、テーブルdbo.AssociationPages、列AssociationIdメッセージ」。データベース内または EF fluent API を使用して制約を設定できることはわかっていますが、なぜこれが機能しないのですか?
アイデアをありがとう!
update
WillCascadeOnDelete() も機能しません:(