將驗證新增至實體類別
注意
資料集和相關類別是 2000 年代初的舊版 .NET Framework 技術,可讓應用程式在應用程式與資料庫中斷連線時使用記憶體中的資料。 這些技術特別適用於可讓使用者修改資料並將變更保存回資料庫的應用程式。 雖然已證明資料集是非常成功的技術,但建議新的 .NET 應用程式使用 Entity Framework Core。 Entity Framework 提供更自然的方式,將表格式資料作為物件模型使用,而且具有更簡單的程式設計介面。
「驗證」實體類別過程會確認資料物件中,輸入的值是否符合物件結構描述中的條件約束,以及是否也符合為應用程式建立的規則。 先驗證資料再將更新傳送至基礎資料庫是減少錯誤的良好做法。 它同時也會降低應用程式與資料庫之間的可能往返次數。
Visual Studio 中的 LINQ to SQL 工具提供了部分方法,這種方法可讓使用者對於插入、更新和刪除完整實體 (以及變更個別資料行) 時執行的設計工具產生的程式碼,加以擴充。
注意
本主題提供使用 O/R 設計工具將驗證新增至實體類別時的基本步驟。 由於在未參考特定實體類別的情況下,可能很難遵循這些泛型步驟,因此提供了使用實際資料的逐步解說。
新增在特定資料行中的值變更時的驗證
這個程序顯示如何在資料行中的值發生變更時驗證資料。 因為驗證是在類別定義 (而不是使用者介面) 內執行,所以如果值無法通過驗證,就會擲回例外狀況。 請在會嘗試變更資料行值的應用程式的程式碼中實作錯誤處理。
注意
在本文的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置。 您使用的可能是不同版本的 Visual Studio 或不同的環境設定。 如需詳細資訊,請參閱將 IDE 個人化。
若要在資料行值變更期間驗證資料
在 O/R 設計工具中開啟或建立新的 LINQ to SQL 類別檔案 (
.dbml
檔案)。 (在方案總管中,按兩下.dbml
檔案。)在 [O/R 設計工具] 中,以滑鼠右鍵按一下要新增驗證的類別,然後選取 [檢視程式碼]。
[程式碼編輯器] 會以所選取實體類別的部分類別開啟。
將游標放在部分類別中。
如果是 Visual Basic 專案:
展開 [方法名稱] 清單。
尋找要新增驗證到其中之資料行所適用的 OnCOLUMNNAMEChanging 方法。
將
OnCOLUMNNAMEChanging
方法新增至部分類別中。加入下列程式碼以先確認已輸入值,然後確定應用程式可接受輸入的資料行值。
value
引數包含建議值,因此請加入邏輯以確認它是有效值:If value.HasValue Then ' Add code to ensure that the value is acceptable. ' If value < 1 Then ' Throw New Exception("Invalid data!") ' End If End If
C# 專案:
由於 C# 專案不會自動產生事件處理常式,您可以使用 IntelliSense 建立在資料行變更時執行的部分方法。 輸入
partial
和一個空格,以存取可用部分方法的清單。 針對要加入驗證的資料行按一下在資料行變更時執行的方法。 下列程式碼與選取在資料行變更時執行的部分方法時所產生的程式碼類似:partial void OnCOLUMNNAMEChanging(COLUMNDATATYPE value) { throw new System.NotImplementedException(); }
新增更新實體類別時執行的驗證
除了可以檢查變更期間的值以外,您還可以在發生整個實體類別的更新時驗證資料。 更新期間執行的驗證可以應商務規則 (Business Rule) 的需要,比較多個資料行的值。 下列程序顯示如何在發生整個實體類別的更新時進行驗證。
注意
整個實體類別的更新驗證程式碼是在部分 DataContext 類別 (而不是在特定實體類別的部分類別) 中執行。
若要在實體類別更新期間驗證資料
在 O/R 設計工具中開啟或建立新的 LINQ to SQL 類別檔案 (
.dbml
檔案)。 (在方案總管中,按兩下.dbml
檔案。)以滑鼠右鍵按一下 [O/R 設計工具] 中的空白區域,然後按一下 [檢視程式碼]。
會以
DataContext
的部分類別開啟 [程式碼編輯器]。將游標放在
DataContext
的部分類別中。如果是 Visual Basic 專案:
展開 [方法名稱] 清單。
按一下 [UpdateENTITYCLASSNAME]。
將
UpdateENTITYCLASSNAME
方法新增至部分類別中。使用
instance
引數存取個別資料行值,如下列程式碼所示:If (instance.COLUMNNAME = x) And (instance.COLUMNNAME = y) Then Dim ErrorMessage As String = "Invalid data!" Throw New Exception(ErrorMessage) End If
C# 專案:
由於 C# 專案不會自動產生事件處理常式,您可以使用 IntelliSense 建立部分
UpdateCLASSNAME
方法。 輸入partial
和一個空格,以存取可用部分方法的清單。 按一下要新增驗證的類別所適用的更新方法。 下列程式碼與選取UpdateCLASSNAME
部分方法時所產生的程式碼類似:partial void UpdateCLASSNAME(CLASSNAME instance) { if ((instance.COLUMNNAME == x) && (instance.COLUMNNAME = y)) { string ErrorMessage = "Invalid data!"; throw new System.Exception(ErrorMessage); } }