在刪除該記錄之前檢查是否存在對特定模型記錄的任何引用的最佳做法是什麼?基本上,我有一個表示圖像的模型,以及與圖像關聯的所有元數據。其他模型將引用一個或多個圖像(取決於模型)。MVC3檢查刪除前的模型記錄參考
比方說,例如,我有一個「Item」,它有一個「MainImage」和一個「AltImage」,它們都只是對Image模型的引用。如果我刪除一個項目記錄,我必須檢查兩個圖像是否被任何其他項目或任何其他表格引用,如果沒有,則刪除該圖像。
我該怎麼辦?
在刪除該記錄之前檢查是否存在對特定模型記錄的任何引用的最佳做法是什麼?基本上,我有一個表示圖像的模型,以及與圖像關聯的所有元數據。其他模型將引用一個或多個圖像(取決於模型)。MVC3檢查刪除前的模型記錄參考
比方說,例如,我有一個「Item」,它有一個「MainImage」和一個「AltImage」,它們都只是對Image模型的引用。如果我刪除一個項目記錄,我必須檢查兩個圖像是否被任何其他項目或任何其他表格引用,如果沒有,則刪除該圖像。
我該怎麼辦?
由於您使用的是數據庫,因此請使用數據庫上的外鍵約束來保持參照完整性。數據庫或EF將阻止您刪除圖像,如果它仍然被引用。您可以捕獲此異常並繼續處理請求而不刪除圖像。
我發現了一篇博客文章Inferring Foreign Key Constraints in EF,可能在設置它們時有用。根據你喜歡什麼
夫婦的想法:
創建觸發器在你DB
這將刪除ALT IMG。 每次你想刪除主記錄行時,其他記錄也會被刪除。
另一個(基於NHibernate的)
確保在實體框架的替換圖像中可能有可能性級聯的命令。在這種情況下,如果刪除一張圖片,另一張圖片也會被刪除。 Here is one example from google how to do this
最笨拙,但最簡單的就是:
同時刪除記錄,當你刪除圖像。
您提到您正在使用ASP.NET MVC3,但您對DAL使用了什麼?你是否直接在你的控制器中執行查詢? – SoWeLie
我認爲@SoWeLie得到的是MVC與創建或刪除記錄沒有任何關係。它完全是數據庫不可知的。你想問你使用的任何數據庫技術的問題,而不是MVC。 –
我爲我的模型生成使用實體框架。 –