2017-07-15 39 views
1

所以,問題是,我試圖通過簡單的搜索,並從數據庫卸下來刪除名爲郵政進入我DeletePost行動刪除條目。的dbupdate例外,當我嘗試從數據庫中

public ActionResult DeletePost(int Id) 
    { 
     var postToDelete = ApplicationDbContext.Posts.Find(Id); 
     postToDelete.Author = null;    
     ApplicationDbContext.Posts.Remove(postToDelete); 
     ApplicationDbContext.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

而且內部異常說:

SQLEXCEPTION:DELETE語句衝突與基準約束 「FK_dbo.AspNetUsers_dbo.Posts_Post_Id」。衝突發生在數據庫「aspnet-Destiny-20170709034743」,表「dbo.AspNetUsers」,列'Post_Id'。

我對這樣的問題沒有足夠的經驗,但這裏是我的FluentAPI代碼級聯刪除,我寫得更早。

modelBuilder 
.Entity<Post>() 
.HasRequired(x => x.Author) 
.WithMany(x => x.Posts) 
.HasForeignKey(x => x.AuthorId) 
.WillCascadeOnDelete(true); 

而且我想我會做同樣的事情帖子ID,但我不知道如何做到這一點。任何幫助將不勝感激。

+0

它是可以爲空的,我已經在數據庫預覽檢查現在。 – HostileException

回答

1

我相信你的數據庫模式是錯誤的。數據庫返回的錯誤表明您正在嘗試刪除帖子,但該帖子由AspNetUsers表(列Post_id)中的外鍵引用。你確定你想在AspNetUsers表中有Post_Id列嗎?這似乎沒有道理。它的設計應角落找尋另一種方式 - 存儲所有的職位應該由外鍵引用用戶表,即

列USER_ID這AspNetUsers引用表中的主鍵列

+0

我試圖刪除帖子,而不是用戶。那麼,根據你所說的,我應該刪除ApplicationUser.cs中的列表 Posts屬性,並將它們僅引用給用戶? – HostileException

+0

我在編輯答案的同時輸入了評論 – MajkeloDev

+0

我不確定,我不知道如何操作,因爲它隨時可能會破壞我的代碼。我不能只爲PostId啓用級聯刪除? – HostileException

0

好了,所以後一些研究我意識到我必須在刪除對象之前刪除任何possbile參考。所以這是我對這個問題的解決方案。

public ActionResult DeletePost(int Id) 
    { 
     var allUsers = ApplicationDbContext.Users.ToList(); 
     var postToDelete = ApplicationDbContext.Posts.Single(c => c.Id == Id); 
     foreach(var item in allUsers) 
     { 
      if (postToDelete.Subscribers.Contains(item)) 
       postToDelete.Subscribers.Remove(item); 
     } 
     ApplicationDbContext.Posts.Remove(postToDelete); 
     ApplicationDbContext.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
+0

這不是一個解決方案,這是一個討厭的workarround。你應該能夠實現你的目標,而不需要修改模型。再一次 - 問題在於你的AspNetUser表格被不正確地創建,你應該找到原因並修復它。 – MajkeloDev

+0

對不起,當您詢問創建** Post_Id **的代碼時,我沒有收到通知。我注意到,這條線不存在過去的一些遷移,並已添加到最近的一個。現在這很奇怪。看看:http://imgur.com/a/8R9Xk – HostileException

+0

它可能不是作者後關係,但後用戶關係。 – HostileException

相關問題