2013-03-25 99 views
1

我有一種方法可以刪除數據庫中的「項目」記錄以及與其關聯的所有「選項」。在Entity Framework中,如何使用外鍵約束刪除記錄?

public bool DeleteProjectById(int id) 
{ 
    using (DbContext db = new DbContext(ConfigHelper.Instance().ConnectionString)) 
    { 
     try 
     { 
      foreach (var entity in db.ProjectOptionItems.Where(o => o.ProjectId == id)) 
       db.ProjectOptionItems.DeleteObject(entity); 

      db.SaveChanges(); 

      var project = db.Projects.SingleOrDefault(o => o.Id == id); 
      db.Projects.DeleteObject(project); 

      db.SaveChanges(); 
      return true; 
     } 
     catch (Exception e) 
     { 
      ErrorLoggingService.Log(this, e); 
      return false; 
     } 
    } 
} 

這工作正常。但是如果我第一次調用db.SaveChanges,這是我希望代碼將如何的方式,這將導致SQL異常(DELETE語句與REFERENCE約束條件衝突)。

有兩個調用SaveChanges()的作品,但肯定不是這樣做的。請幫忙。謝謝!

+3

,你不需要所有的foreach循環,這是一個可能的解決方案。 – 2013-03-25 08:20:17

+0

您需要先清除子集合 – 2013-03-25 08:20:51

+0

@aliriza,謝謝 – Ronald 2013-03-25 08:28:45

回答

5

就像AliRiza說的那樣,把它設置在你的SQL服務器上。此外,在您的DbContext課堂上使用這樣的:在你的數據庫,如果你設置刪除級聯

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<ProjectOptionItems>().WillCascadeOnDelete(); 
} 
+0

什麼是ProjectOptionItems?請求參考,但不告訴我如何解決。 – nzondlo 2013-11-01 14:05:09

+0

@nzondlo:查看原始帖子的代碼。 Ronalds對象名稱是「ProjectOptionItem」。將其替換爲要級聯的對象。 – 2013-11-01 17:29:08

+0

謝謝,但我在VS2010中使用Entity 4.x,我認爲我沒有選擇使用它。現在也打算使用存儲過程來處理刪除(這是另一個故事) – nzondlo 2013-11-04 04:22:48