次の方法で共有


エンティティ クラスに検証を追加する

DataSet クラスと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初頭のレガシ .NET Framework テクノロジです。 このテクノロジは、ユーザーがデータを変更し、変更をデータベースに保持できるアプリに特に役立ちます。 データセットは実証済みの成功したテクノロジですが、新しい .NET アプリケーションには Entity Framework Core を使用することをお勧めします。 Entity Framework は、オブジェクト モデルとして表形式データを操作するより自然な方法を提供し、よりシンプルなプログラミング インターフェイスを備えています。

エンティティ クラスの検証は、データ オブジェクトに入力された値がオブジェクトのスキーマの制約と、アプリケーションに対して確立された規則に準拠していることを確認するプロセスです。 基になるデータベースに更新を送信する前にデータを検証することをお勧めします。これにより、エラーが減ります。 また、アプリケーションとデータベースの間のラウンド トリップの可能性が減ります。

Visual Studio の LINQ to SQL ツールには、完全なエンティティの挿入、更新、削除中、および個々の列の変更中と変更後に実行されるデザイナーで生成されたコードをユーザーが拡張できる部分メソッドが用意されています。

このトピックでは、 O/R デザイナーを使用してエンティティ クラスに検証を追加する基本的な手順について説明します。 特定のエンティティ クラスを参照せずにこれらの一般的な手順に従うのが難しい場合があるため、実際のデータを使用するチュートリアルが提供されます。

特定の列の値に変更の検証を追加する

この手順では、列の値が変更されたときにデータを検証する方法を示します。 検証は (ユーザー インターフェイスではなく) クラス定義内で実行されるため、値によって検証が失敗した場合、例外がスローされます。 列の値を変更しようとするコードのエラー処理をアプリケーションに実装します。

この記事の手順では、Visual Studio で使用できる対話型開発エクスペリエンス (IDE) の最新バージョンについて説明します。 コンピューターには、一部のユーザー インターフェイス要素に対して異なる名前または場所が表示される場合があります。 別のバージョンの Visual Studio または異なる環境設定を使用している可能性があります。 詳細については、「IDEのカスタマイズ」を参照してください。

列の値の変更中にデータを検証するには

  1. O/R デザイナーで新しい LINQ to SQL クラス ファイル (.dbml ファイル) を開くか作成します。 (ソリューション エクスプローラー.dbml ファイルをダブルクリックします)。

  2. O/R デザイナーで、検証を追加するクラスを右クリックし、[コードの表示] を選択します。

    コード エディターが開き、選択したエンティティ クラスの部分クラスが表示されます。

  3. 部分クラスにカーソルを置く。

  4. Visual Basic プロジェクトの場合:

    1. [メソッド名] リストを展開します。

    2. 検証を追加する列の OnCOLUMNNAMEChanging メソッドを特定します。

    3. OnCOLUMNNAMEChanging メソッドが部分クラスに追加されます。

    4. 次のコードを追加して、最初に値が入力されたことを確認してから、列に入力された値がアプリケーションで許容できることを確認します。 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();
        }
    

エンティティ クラスに更新の検証を追加する

変更中に値をチェックするだけでなく、完全なエンティティ クラスの更新が試行されたときにデータを検証することもできます。 更新の試行中に検証を行うと、ビジネス ルールでこれを必要とする場合に、複数の列の値を比較できます。 次の手順は、完全なエンティティ クラスを更新しようとしたときに検証する方法を示しています。

完全なエンティティ クラスに対する更新の検証コードは、(特定のエンティティ クラスの部分クラスではなく) 部分 DataContext クラスで実行されます。

エンティティ クラスの更新中にデータを検証するには

  1. O/R デザイナーで新しい LINQ to SQL クラス ファイル (.dbml ファイル) を開くか作成します。 (ソリューション エクスプローラー.dbml ファイルをダブルクリックします)。

  2. O/R デザイナーで空の領域を右クリックし、[コードの表示] をクリックします。

    コード エディターが開き、 DataContextの部分クラスが表示されます。

  3. DataContextの部分クラスにカーソルを置く。

  4. Visual Basic プロジェクトの場合:

    1. [メソッド名] リストを展開します。

    2. [ UpdateENTITYCLASSNAME] をクリックします。

    3. UpdateENTITYCLASSNAME メソッドが部分クラスに追加されます。

    4. 次のコードに示すように、 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);
        }
    }