我需要對刪除級聯進行徹底解釋,因爲它給了我不必要的頭痛。我有一個News.cs類和一個Comment.cs類。新聞有評論的收集和評論必須屬於某個新聞,所以我成立了我的課像下面關於在實體框架中刪除級聯的說明
public class News
{
public int NewsId { get; set; }
[Display(Name = "Title")]
public string Title { get; set; }
[Display(Name = "Details")]
public string Details { get; set; }
public DateTime DateCreated { get; set; }
public int AppUserId { get; set; }
[ForeignKey("AppUserId")]
public virtual AppUser AppUser { get; set; }
public ICollection<Comment> Comment { get; set; }
}
public class Comment
{
public int CommentId { get; set; }
public string CommentText { get; set; }
public DateTime DateCreated { get; set; }
public int AppUserId { get; set; }
public int NewsId { get; set; }
[ForeignKey("AppUserId")]
public virtual AppUser User { get; set; }
[ForeignKey("NewsId")]
public virtual News News { get; set; }
}
我期待的行爲是,如果我刪除一條評論,應該不會影響到父新聞,但如果我刪除一條消息,我沒有看到任何理由保留孩子的意見,所以意見應該刪除。 我跑在包管理器控制檯更新數據庫命令我不停收到此錯誤
引進國外KEY約束「FK_dbo.Comments_dbo.News_NewsId」表「評論」 可能會導致循環或多個級聯路徑。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他的FOREIGN KEY約束。無法創建約束。請參閱前面的 錯誤。 我該如何解決這個問題?
由於新聞的鏈接評論和評論新聞你會得到一個「迴路」時刪除。您需要在註釋中指定ON DELETE NO ACTION選項。因此,當您刪除新聞時,評論將被刪除,但是沒有任何操作可以回到新聞鏈接(阻止循環)。 – JustFogMaxi
您可以使用Fluent API刪除級聯刪除,如此處所述:http://stackoverflow.com/questions/17127351/introducing-foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths –
@JustFogMaxi否,雙向關係只是一個類模型工件。在數據庫中,它是一個和相同的外鍵,具有定義的一個*級聯刪除操作(從父到子)。這必須由其他具有級聯刪除的外鍵引起,我懷疑是'Comment.AppUser'。 –