背景
與英法的核心代碼第一種方法,驗證是強大和簡單:https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/validation實體框架的核心化異常處理分貝第一
與數據庫的第一種方法,它似乎像任何驗證正在發生由幕後數據庫時調用dbcontext.SaveChanges();
。更糟的是,這些異常是模糊的和完全沒有幫助,例如,SqlException: String or binary data would be truncated
可以拋出,如果的實體的任何的字符串屬性的任何有太多的字符(我們是一個傳統的應用程序充滿了char(10)
和這樣),或者即使是一個字符串的鍵也是空的。
問題
我想知道是否有任何合理或可接受的方式來執行驗證。我發現this question這可能有助於調試,但我想執行的約束代碼
有什麼不是改變每一個汽車財產一拋出,如果它的約束得不到滿足更好的方法?
,但我們正在寫一個JSON-RPC over HTTP的數據庫API來代替我們舊的存儲過程架構,而不是一個網站。所以問題仍然是,sqlserver的驗證錯誤信息完全沒有價值,我需要一個解決方案,比如擴展代碼生成工具以自動添加驗證 –
無論是否爲網站,您的提供API的框架都在進行驗證,因爲EF只是不會。由於代碼中的驗證是業務邏輯,所以從數據庫中推斷它們並不容易,因此數據庫首先不會自行生成它們。您可以在從數據庫生成模型之後編寫額外的代碼,也可以嘗試在EF內核中修改代碼編寫器。雖然前者會容易得多。 – Smit
主要是我擔心的約束類型就像它在db中的char(10)一樣,但屬性只是字符串,所以這些類型可以非常簡單地從數據庫中推斷出來,但我想我'我需要自己添加它 –