2014-07-03 47 views
0

我首先使用EF數據庫並使用MVC。實體框架數據庫第一個屬性驗證

我想添加一些屬性驗證,以比較其舊值與新的和報告驗證錯誤的MVC ModelState,如果有問題。

這很容易,先使用代碼並使用屬性上的「set」進行驗證。不過,我不能使用數據庫,因爲它的自動生成。

我已經看過使用IValidatableObject和validate()方法,但是那時值已經在屬性上進行了更改,所以我不能再看到舊的比較。

創建一個方法將新值傳遞給第一個檢查它的缺點,我想不出另一種方式。

有什麼建議嗎?

感謝

+1

僅僅因爲它是自動生成的並不意味着你不能在事後處理POCO。即使那樣,你總是可以使用視圖模型。 –

回答

0

它並不理想,這已經開始說明模型和數據庫的一些弱點,但這是我最終做到的。

我決定改變我的模型中的屬性,以便set爲private,然後在partial類中創建一個單獨的方法來設置值。驗證然後全部在該方法中完成。

感謝您的幫助無論如何

0

如果要比較新值的舊值,那麼你將不得不首先抓住從數據庫中的值(更新前),並比較它們:

[HttpPost] 
public ActionResult Update(MyObject myObject) 
{ 
    var oldObject = db.Objects.FirstOrDefault(o => o.Id == myObject.Id); 
    //Compare oldObject.Value to myObject.Value 
} 

您仍然可以使用IValidatebleObject並傳入您需要將該邏輯保存在控制器外部的對象。

相關問題