共用方式為


逐步解說:將驗證加入至實體類別

「驗證資料」(Validate Data) 過程會確認資料物件中輸入的值除了符合為應用程式建立的規則外,也符合物件結構描述中的條件約束。先驗證資料再將更新傳送至基礎資料庫是良好的做法,因為這樣不但會減少錯誤,也會減少應用程式與資料庫之間的可能往返次數。

物件關聯式設計工具 (O/R 設計工具) 提供了部分方法,這種方法可讓使用者對於插入、更新和刪除完整實體 (以及變更個別資料行) 時執行的設計工具產生的程式碼,加以擴充。

這個逐步解說以逐步解說:建立 LINQ to SQL 類別 (O/R 設計工具) 主題為基礎,提供將驗證加入至 LINQ to SQL [LINQ to SQL] 實體類別的逐步指示。

在這個逐步解說中,您將學習如何執行下列工作:

  • 加入在特定資料行中的資料變更時執行的驗證。

  • 加入更新完整實體時執行的驗證。

必要條件

若要完成這個逐步解說,您需要下列項目:

開啟 ORDesignerWalkthrough 方案

若要開啟 ORDesignerWalkthrough 方案

加入在特定資料行中的值變更時的驗證

在這部分的逐步解說中,您會對某個訂單的 RequiredDate 資料行加入驗證邏輯。同時也會加入程式碼來確認 RequiredDate 早於目前的日期。因為驗證是在實際類別定義 (而不是使用者介面) 中執行,所以如果值無法通過驗證,就會擲回例外狀況 (Exception)。

若要在資料行值變更期間驗證資料

  1. 在 O/R 設計工具中開啟 Northwind.dbml 檔案 (按兩下 [方案總管] 中的 [Northwind.dbml] 檔案)。

  2. 因為是要對訂單的 RequiredDate 加入驗證,所以請以滑鼠右鍵按一下設計工具中的 Order 類別,然後按一下 [檢視程式碼]。

    會以訂單的部分類別開啟 [程式碼編輯器]。

  3. 將游標放在部分 Order 類別中。

  4. 如果是 Visual Basic 專案:

    1. 展開 [方法名稱] 清單 (顯示 [(宣告)] 的下拉式方塊)。

    2. 按一下 [OnRequiredDateChanging]。

    3. OnRequiredDateChanging 方法會加入至部分 Order 類別中。

    4. 在 OnRequiredDataChanging 方法內加入下列程式碼,以確保輸入的 RequiredDate 值未早於目前的日期:

      If value.HasValue Then
          If value < Today Then
              Throw New Exception("Required Date cannot be in the past")
          End If
      End If
      

    C# 專案:

    1. 在部分 Order 類別中加入下列程式碼,以確保輸入的 RequiredDate 值未早於目前的日期:

      partial void OnRequiredDateChanging(System.DateTime? value)
      {
          if (value < System.DateTime.Today)
          {
              throw new System.Exception("Required Date cannot be in the past");
          }
      }
      

測試應用程式

測試驗證邏輯時,需要執行應用程式,並輸入可以讓驗證失敗的值。

若要測試應用程式

  1. 按下 F5 鍵。

  2. 在顯示訂單的方格中,將某個訂單的 [RequiredDate] 變更為早於目前日期的日期,並移離記錄以接受變更。

    新的值會讓驗證失敗,而且會如預期擲回例外狀況。

  3. 關閉表單。(停止偵錯)。

處理 DataGridView 中的驗證錯誤

在測試應用程式時產生來自 DataGridView 的錯誤訊息,指示開發人員要處理 DataError 事件。下列程序顯示如何處理這個事件。

若要處理 DataGridView 中的驗證錯誤

  1. 在 [程式碼編輯器] 中開啟 Form1。

  2. 選取 [OrdersDataGridView]。

  3. DataError 事件建立事件處理常式。

  4. 加入程式碼以顯示錯誤。事件處理常式會與下列類似:

    Private Sub OrdersDataGridView_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles OrdersDataGridView.DataError
        MessageBox.Show(e.Exception.Message)
    End Sub
    
    private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
    {
        MessageBox.Show(e.Exception.Message);
    }
    

加入更新實體類別時執行的驗證

除了可以檢查變更期間的值以外,您還可以在發生整個實體類別的更新時驗證資料。更新期間執行的驗證可以應商務規則 (Business Rule) 的需要,比較多個資料行的值。例如,下列程序顯示如何在運費低於所設限制時,驗證合作的是正確的貨運公司。

若要在實體類別更新期間驗證資料

  1. 在 O/R 設計工具中開啟 Northwind.dbml 檔案 (按兩下 [方案總管] 中的 [Northwind.dbml] 檔案)。

  2. 因為是對完整 Order 類別加入更新驗證,所以必須存取的部分方法是位在產生的 DataContext 類別 (NorthwindDataContext) 中。以滑鼠右鍵按一下 O/R Designer 中的空白區域,然後按一下 [檢視程式碼]。

    會以 NorthwindDataContext 的部分類別開啟 [程式碼編輯器]。

  3. 將游標放在 NorthwindDataset 部分類別中。

  4. 如果是 Visual Basic 專案:

    1. 展開 [方法名稱] 清單 (顯示 [(宣告)] 的下拉式方塊)。

    2. 按一下 [UpdateOrder]。

    3. UpdateOrder 方法會加入至部分 NorthwindDataContext 類別中。

    4. 如果 [Freight] 值低於 10,Federal Shipping 就不會送貨。因此請在 UpdateOrder 方法內加入下列程式碼,以確保在 [Freight] 值低於 10 時輸入的 [ShipVia] 值不是 [Federal Shipping]。

      If (instance.ShipVia = 3) And (instance.Freight < 10) Then
          Dim ErrorMessage As String = "Federal Shipping " & _
           "does not deliver for less than 10. " & _
           "You must use a different shipper."
          Throw New Exception(ErrorMessage)
      End If
      

    C# 專案:

    1. 在部分 NorthwindDataContext 類別中加入下列程式碼,以確保在 [Freight] 值低於 10 時輸入的 [ShipVia] 值不是 [Federal Shipping]。

      partial void UpdateOrder(Order instance)
      {
          if ((instance.ShipVia == 3) && (instance.Freight < 10))
          {
              string ErrorMessage = "Federal Shipping " +
                  "does not deliver for less than 10. " +
                  "You must use a different shipper.";
              throw new System.Exception(ErrorMessage);
          }
      }
      

測試應用程式

若要測試驗證邏輯,請執行應用程式,並輸入可以讓驗證失敗的值。

若要測試應用程式

  1. 按下 F5 鍵。

  2. 在顯示訂單的方格中,找到 [ShipVia] 為 3 的記錄。然後將 [Freight] 變更為 5,再移離記錄以接受變更。

    因為驗證要到實際送出記錄進行更新時才會執行,所以驗證還不會傳回失敗結果。

  3. 按一下表單上的 [Save] 按鈕。

    此時,驗證會失敗,並擲回例外狀況。

  4. 關閉表單 (停止偵錯)。

後續步驟

根據應用程式需求的不同,在加入 LINQ to SQL 實體類別的驗證之後,您可能會想執行幾個步驟。您可以進行下列作業讓這個應用程式發揮更強的功能:

  • 建立其他 LINQ 查詢以排序和篩選資料。如需詳細資訊,請參閱 LINQ to SQL 查詢

請參閱

工作

逐步解說:建立 LINQ to SQL 類別 (O/R 設計工具)

概念

任何內容來做為資料在 Visual Studio 應用程式開發是 2012 的新

LINQ to SQL 查詢

其他資源

物件關聯式設計工具 (O/R 設計工具)

LINQ to SQL [LINQ to SQL]

LINQ to SQL Walkthroughs