2010-05-14 58 views
0

在開發我的數據庫時,我正在努力確保數據的完整性。所以,例如,假設一個作者,其作者從數據庫中刪除(但反之亦然)時應刪除一本書。添加和刪除時確保數據庫完整性

當我設置外鍵時,我確實設置了CASCADE,所以我覺得如果我從LINQ執行刪除操作,它會自動發生。這是真的?如果不是,我是否需要自己執行所有刪除操作,或者這是如何完成的?

我的第二個問題是:數據庫是否確保當我將它添加到表格中時,我擁有所需的所有適當信息(例如,我不能添加一本書,沒有作者),還是我需要在業務邏輯中確保自己?如果我嘗試使用LINQ to SQL來做這件事會發生什麼?我會得到一個異常嗎?

感謝您的幫助。

回答

1

級聯外鍵會自動爲您級聯刪除。

參考完整性將由數據庫強制執行;在這種情況下,您應該首先添加作者,然後添加Book。如果你違反了參考文獻的完整性,你將會得到一個例外。

1

這聽起來像您可能有興趣使用交易的第二個問題。例如,您需要向數據庫添加多個對象,並且要確保所有對象都被添加或不添加。這是數據庫事務完成的內容。而且,您應該在數據/業務層執行此操作,您可以通過向datacontext類添加部分類來完成此操作。如果您的業務流程聲明例如每個用戶都必須擁有ADDRESS或其他特性。這取決於你的情況。

LINQ自動使用交易,只要你在一個單獨的(使用),即你在這一步執行的一切。

如果您需要執行多個步驟或結合使用非LINQ數據庫操作,則可以使用事務處理範圍。您需要啓用DISTRIBUTED TRANSACTION SERVICE。這允許跨文件和數據庫的交易。

見的TransactionScope

using (TransactionScope scope = new TransactionScope()) 
{ 
do stuff here 
scope.Complete 
} 
相關問題