2012-08-14 57 views
1

可能已經提出了此問題,對不起需要數據庫訪問的代碼第一次驗證(重複瓦爾)

我正在查看驗證我們模型的體系結構。我們簡單的驗證可以通過使用屬性驗證屬性(一些自定義),並使用

ModelState.IsValid

但問題是,當驗證需要訪問數據庫或訪問其他屬性來實現。一個完美的例子是檢查重複的名字。在這種情況下,我們需要檢查數據庫中的重複名稱,其中id與當前對象的id不相同(用於更新)

如果我們將此作爲驗證屬性寫入name屬性,會導致問題。 Ome我們如何訪問數據庫,以及兩個如何訪問ID屬性。

所以在最後。有什麼好的方法來解決這個問題的例子嗎?

回答

0

我今天這個花了一些時間來研究一個項目我工作,來到了這些結論。

這是不壞解決怎麼樣,大部分是涉及到一些反思和使用驗證的上下文檢查和訪問模型或使用IValidationObject的其他屬性。真正的問題是可以做需要數據庫交互的驗證。

對於一個我很關心性能,在一個特定的情況下驗證作出返回的對象,以確保它的存在,我以後需要的關係分配,然後這將導致另一個查詢的查詢。

其次,你需要考慮數據庫併發。執行重複檢查的最佳方式是在插入之前,因爲數據庫可能會在兩個操作之間進行更改。這也與第一個原因有關,一個對象可能在數據庫報告它存在後立即被刪除。

在我的特別項目,我覺得它更好地保持這種行爲與修改我的EF上下文和添加任何走錯到ModelState中。