モデルの更新ウィザードによる .edmx ファイルに対する変更
基になるデータベースを変更した後、モデルの更新ウィザードを使用して .edmx ファイルを更新できます。 以下は、モデルの更新ウィザードを使用して .edmx ファイルを更新する際の注意事項です。
モデルの更新ウィザードでは、データベースの変更内容に基づいて .edmx ファイルを更新すると、既存のストレージ モデルが上書きされます。 つまり、ストレージ モデルに加えたカスタム変更はすべて削除されます。
モデルの更新ウィザードは、概念モデルとマッピングに対して追加の変更を加えるだけです。 すなわち、データベースに新しいオブジェクトを追加すると、モデルの更新ウィザードによって、対応するエンティティとアソシエーションが概念モデルに追加され、それらがストレージ モデルにマップされます。 ただし、データベースからオブジェクトが削除されても、モデルの更新ウィザードは対応するエンティティまたはアソシエーションを概念モデルから削除しません (対応するマッピングは削除されます)。 モデルの更新ウィザードを実行せずにストレージ モデルからオブジェクトを削除する方法については、「方法: ストレージ モデルからオブジェクトを削除する (Entity Data Model ツール)」を参照してください。
ウィザードの [追加] タブで [生成されたオブジェクトの名前を複数化または単数化する] チェックボックスをオンにすると、以下のアクションが試行されます。
すべてのエンティティ型名を単数形にする。
すべてのエンティティ セット名を複数形にする。
各ナビゲーション プロパティが最大 1 つのエンティティを返す場合は、名前を単数形にする。
各ナビゲーション プロパティが複数のエンティティを返す場合は、名前を複数形にする。
Entity Data Model ウィザードは PluralizationService を作成し、それを EntityModelSchemaGenerator に渡して、単数形と複数形の英語のルールを適用します。
ウィザードの [追加] タブで [モデルに外部キー列を含める] チェックボックスをオンにすると、新しく生成されたエンティティ型の外部キー列に対応するプロパティがデータベースに含められます。 詳細については、「Defining and Managing Relationships」を参照してください。
データベースからの更新時に概念モデルに対して行われる変更
次の表で、データベース オブジェクトに変更を加えたときに、モデルの更新ウィザードによってどのように概念モデルが変更されるかについて説明します。
データベース オブジェクト | データベース内のオブジェクトへの変更 | データベースからの更新時に概念モデルに対して行われる変更 |
---|---|---|
テーブル/ビュー |
追加 |
新しいエンティティ型と対応するアソシエーションおよびマッピングが概念モデルに追加されます。 |
削除 |
テーブルまたはビューはストレージ モデルから削除されます。 テーブルに対するマッピングはすべて削除されます。 テーブルまたはビューに外部キー リレーションシップ用のキーを格納した列が 1 つ以上ある場合、対応するアソシエーションのマッピングは削除されます。 |
|
名前の変更 |
テーブルまたはビューの名前の変更を変更した場合に、概念モデルおよびマッピングに生じる影響は、変更前の名前でテーブルまたはビューを削除し、変更後の名前でテーブルまたはビューを追加した場合と同じです。 |
|
主キーの変更 |
テーブルまたはビューの主キーに列を追加すると、新しい主キーを参照する外部キーの概念モデルにアソシエーションが追加されます。 対応する新しいアソシエーションが概念モデルに追加されます。 古い主キーに基づいた既存のアソシエーション (またはこれらの既存のアソシエーションの一方または両方の End) はマップされなくなります。
注 :
マップされていないアソシエーションはそのままデザイナー画面に表示され、検証エラーが発生します。検証エラーを修正するには、マップされていないアソシエーションを削除するか、再マップします。
主キーから列を削除する場合は、対応するエンティティ プロパティのキーの指定を削除する必要があります。 エンティティ プロパティとして存在していた列を主キーに追加する場合、そのエンティティ プロパティをエンティティ キーにする必要があります。 プロパティの変更方法については、「方法: スカラー プロパティを作成および変更する (Entity Data Model ツール)」を参照してください。 既存の列を主キーに追加したとき、既に (エンティティ プロパティではなく) アソシエーションにマップされていた場合は、対応する新しいエンティティ プロパティが作成されます。 |
|
列 |
追加 |
対応するエンティティは、一致するプロパティとマッピングで更新されます。 対応する型が継承階層の一部である場合、階層のルートに最も近く、影響を受けるテーブルにマップされるエンティティ型のみが、一致するプロパティで更新されます。 これにより、同じ階層に含まれる複数の子エンティティに対して同じプロパティが祖先として定義される状況を回避します。 |
削除 |
列に対するマッピングは削除されます。 |
|
名前の変更 |
列の名前を変更した場合に、概念モデルに生じる影響は、変更前の名前で列を削除し、変更後の名前で列を追加した場合と同じです。 外部キー制約の一部である列の名前を変更すると、必要なエンティティ型がすべて存在する場合は、新しいアソシエーションと必要なマッピングが概念モデルに追加されます。 |
|
定義の変更 |
概念モデルまたはマッピングに対する変更はありません。 変更された列の型と、対応するエンティティ プロパティの型との互換性がない場合は、手動でモデルを更新する必要があります。 プロパティの変更方法については、「方法: スカラー プロパティを作成および変更する (Entity Data Model ツール)」を参照してください。 |
|
外部キー |
追加 |
必要なエンティティ型がすべて存在する場合は、新しいアソシエーションと必要なマッピングが概念モデルに追加されます。 |
削除 |
概念モデルまたはマッピングに対する変更はありません。 |
|
名前の変更 |
概念モデルまたはマッピングに対する変更はありません。 |
|
ストアド プロシージャ |
追加 |
概念モデルまたはマッピングに対する変更はありません。 ストアド プロシージャは、関数インポートとして手動で概念モデルに追加できます。 詳細については、「方法: ストアド プロシージャをインポートする (Entity Data Model ツール)」を参照してください。 |
削除 |
ストアド プロシージャに対するマッピングは削除されます。 関数インポートがストアド プロシージャにマップされていた場合は、関数インポートを削除するか、別のストアド プロシージャにマップする必要があります。 エンティティ型の挿入、更新、または削除の動作がストアド プロシージャにマップされていた場合、マッピングは削除されます。 |
|
名前の変更 |
関数インポート、またはエンティティ型の挿入、更新、削除の動作のストアド プロシージャに対するマッピングは削除されます。 概念モデルに生じる影響は、変更前の名前でストアド プロシージャを削除し、変更後の名前でストアド プロシージャを追加した場合と同じです。 名前変更後のストアド プロシージャに新しい関数インポートを作成するか、元の関数インポートを名前変更後のストアド プロシージャに再マップする必要があります。 |
|
定義の変更 |
ストアド プロシージャに対してパラメーターの追加または削除を行うと、ストアド プロシージャへのマッピングはすべて無効になります。 関数インポートがストアド プロシージャにマップされていた場合は、関数インポートを削除して再作成する必要があります。 エンティティ型の挿入、更新、または削除の動作がストアド プロシージャにマップされていた場合、動作を再マップする必要があります。 |
参照
処理手順
方法: データベースの変更時に .edmx ファイルを更新する (Entity Data Model ツール)
その他のリソース
モデルの更新ウィザード (Entity Data Model ツール)
Entity Data Model ツールのタスク