エンティティ クラスに検証を追加する
Note
データセットと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初期からのレガシ .NET Framework テクノロジです。 テクノロジが特に役立つのは、ユーザーがデータを変更し、変更をデータベースに戻して保持できるようにするアプリケーションです。 データセットは非常に優れたテクノロジであることが証明されていますが、新しい .NET アプリケーションでは Entity Framework Core を使用することをお勧めしています。 Entity Framework には、オブジェクト モデルとして表形式データを操作する、より自然な方法が用意されており、よりシンプルなプログラミング インターフェイスが備わっています。
エンティティ クラスの "検証" とは、データ オブジェクトに入力された値が、アプリケーションに対して設定された規則に従っていること、およびオブジェクトのスキーマ内の制約に従っていることを確認するプロセスです。 基になるデータベースに更新を送信する前にデータを検証すると、エラーを減らすことができます。 アプリケーションとデータベースの間で生じる可能性のあるラウンド トリップの回数も減ります。
Visual Studio の LINQ to SQL ツールで提供される部分メソッドを使用すると、完全なエンティティの挿入、更新、削除時と、個々の列の変更中および変更後に実行される、デザイナーで生成されたコードを拡張できます。
注意
このトピックでは、O/R デザイナーを使用してエンティティ クラスに検証を追加する基本的な手順を示します。 特定のエンティティ クラスを参照せずにこれらの汎用的な手順に従うのは難しい可能性があるため、実際のデータを使用するチュートリアルが用意されています。
特定の列の値の変更に対する検証を追加する
この手順では、列の値の変更時にデータを検証する方法を示します。 検証はユーザー インターフェイスではなくクラス定義の内部で実行されるため、値によって検証が失敗する場合は例外がスローされます。 列の値を変更しようとするアプリケーションのコードには、エラー処理を実装してください。
Note
この記事で紹介する Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 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(); }
エンティティ クラスの更新の検証を追加する
変更時の値のチェックに加えて、エンティティ クラス全体の更新が試行されたときにデータを検証することもできます。 更新の試行時の検証では、ビジネス ルールにおける必要性に応じて複数の列の値を比較できます。 次の手順は、エンティティ クラス全体の更新が試行されたときに検証を行う方法を示しています。
Note
エンティティ クラス全体の更新に対する検証コードは、特定のエンティティ クラスの部分クラスではなく、部分 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); } }