2010-06-18 78 views
1

我討厭這三張表。兩個表格有多對多的關係,因此它會生成第三個表格。這會安全刪除我的記錄嗎?

http://imgur.com/yLKif.png

我使用LINQ到SQL,並在.dbml文件我已經拖那裏所有的文件夾到圖形表面。

下面是我用來安全刪除區域的方法。請記住,文檔與區域相關聯,因此我不能刪除它並將文檔懸掛起來。

 ScansDataContext db = new ScansDataContext(); 

     /// <summary> 
     /// Deletes an Area object from the database along with all associations in the database. 
     /// </summary> 
     /// <param name="area">Area object to save</param> 
     public void Delete(Area area) 
     { 
      db.DocumentAreaRelations.DeleteAllOnSubmit(area.DocumentAreaRelations); 
      db.Areas.DeleteOnSubmit(area); 
      db.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict); 
     } 
+0

爲什麼不把限制放在數據庫中?這樣就不可能編程或者甚至手動搞亂數據。如果有人進來和手指粗糙,並刪除你的地區,那麼你將被擱置。這就是爲什麼關係和約束屬於數據庫。 – 2010-06-18 15:58:22

+0

你在用什麼數據庫? – 2010-06-18 15:59:28

+0

Microsoft SQL Server – 2010-06-18 16:07:06

回答

3

假設您在數據庫中仍然存在強制執行關係的約束條件......看起來您應該很樂意去找我。如果您沒有在數據庫中設置密鑰,則需要添加它們。

您將首先刪除所有關係,實際實體第二個和SubmitCahnges()將所有內容都包含在本地事務中,以便它是單個工作單元。

+0

我有使用Visual Studio圖形設計器設置的外鍵。這個用例足夠好嗎? – 2010-06-18 16:05:09

+0

確保密鑰具有ON DELETE CASCADE設置。 – 2010-06-18 16:24:55

1

是的,應該刪除記錄。但請確保您已正確設置數據庫約束,例如

CONSTRAINT [FK_tblCategory_tblCompany] FOREIGN KEY([CompanyID]) 
REFERENCES [tblCompany] ([ID])ON DELETE CASCADE ON UPDATE CASCADE 

,或者你可以設置這個在您的dataentity

0

我有幾桌是做類似的東西,使用MS SQL Server 2008的

我也有外鍵設置爲級聯刪除上。所以,考慮到你的表情況,我會刪除一個區域,一旦刪除命令被髮送到服務器,它會自動級聯到連接表。 OnDelete觸發器可以在連接表中使用,以確保文檔在連接記錄被取出後安全地刪除。

LINQ從來沒有抱怨過,但爲了安全起見,我總是在我的LINQ類中有一個「Scrubbing」函數,如果它們已被枚舉,就會清除單個對象的外鍵關係。這主要是爲了編輯對象,而不是被刪除。

Partial Class MyLINQObject 
    Public Sub ScrubRelationships() 
     _RelatedTableObjects = New EntityRef(Of RelatedTableObject) 
    End Sub 
End Class 

希望有幫助!