方法: キーが推論されない場合にエンティティ キーを作成する (Entity Framework)
このトピックでは、Entity Data Model ウィザードまたはモデルの更新ウィザードでエンティティ キーを推論できなかった場合に、.edmx ファイルを手動で編集してエンティティ キーを変更する方法を説明します。
.edmx ファイルを Entity Data Model ウィザードまたはモデルの更新ウィザードで生成または更新すると、対応するテーブルの主キーにエンティティ型のキーがマップされます。 ビューなどで主キーが定義されていない場合は、テーブルまたはビューの列に基づいて一意のエンティティ キーが推論されます。 推論されたキーは、テーブルまたはビューの NULL 非許容の列と非バイナリの列で構成されています。 テーブルまたはビューに NULL 許容の列とバイナリの列のみが含まれている場合、キーは推論されません。
エンティティ キーが推論されない場合、エンティティはモデルに追加されません。 代わりに、キーが定義されていない EntityType 要素を含むコード コメントが .edmx ファイルの SSDL セクションに追加されます。
エンティティ キーの詳細については、「EntityType Element (CSDL)」および「EntityType Element (SSDL)」を参照してください。
このトピックの手順では、Visual Studio で有効な .edmx ファイルを開いていることを前提としています。
![]() |
---|
以下の手順に従って .edmx ファイルの SSDL セクションに加えた変更は、モデルの更新ウィザードを使用してモデルを更新すると上書きされます。この場合、.edmx ファイルの手動編集を避けるには、各テーブルに主キーがあるか、各テーブルまたはビューの 1 つ以上の列が NULL 非許容または非バイナリであるようにデータベース スキーマを変更します。 |
テーブルからキーが推論されない場合のエンティティ キーの追加
次の手順は、テーブルに対応するエンティティ型で使用します。 この手順は、XML エディターで .edmx ファイルを開いていることを前提としています。
エンティティ デザイナーで、テーブルの列に基づいてエンティティ キーが推論されない場合、エンティティはモデルに追加されません。 代わりに、キーが定義されていない EntityType 要素を含むコード コメントが .edmx ファイルの SSDL セクションに追加されます。
テーブルからキーが推論されない場合にエンティティ キーを追加するには
.edmx ファイルの SSDL セクションで EntityType 要素のコメントを解除します。
該当する Key 要素を EntityType 要素に追加して、エンティティ型のキーを定義します。 詳細については、「EntityType Element (SSDL)」を参照してください。
注 :
エンティティ キーの定義に使用される列は、テーブルの行を一意に識別する必要があります。 SSDL セクションで、追加したエンティティ型のマップ先テーブルを指定する EntitySet 要素を追加します。 詳細については、「EntitySet Element (EntityContainer SSDL)」を参照してください。
CSDL セクションで、追加した SSDL エンティティ型に対応する EntityType 要素を追加します。 詳細については、「EntityType Element CSDL」を参照してください。
C-S (概念モデルからストレージ モデルへの) マッピング セクションで、追加した SSDL と CSDL のエンティティ型の間のマッピングを指定する EntitySetMapping 要素を追加します。 詳細については、「EntitySetMapping Element (MSL)」を参照してください。
ビューからキーが推論されない場合のエンティティ キーの追加
次の手順は、ビューに対応するエンティティ型で使用します。 この手順は、XML エディターで .edmx ファイルを開いていることを前提としています。
エンティティ デザイナーで、ビューの列に基づいてエンティティ キーが推論されない場合、エンティティはモデルに追加されません。 代わりに、キーが定義されていない EntityType 要素を含むコード コメントが .edmx ファイルの SSDL セクションに追加されます。
ビューからキーが推論されない場合にエンティティ キーを追加するには
.edmx ファイルの SSDL セクションで EntityType 要素のコメントを解除します。
該当する Key 要素を EntityType 要素に追加して、エンティティ型のキーを定義します。 詳細については、「EntityType Element (SSDL)」を参照してください。
注 :
エンティティ キーの定義に使用される列は、ビューの行を一意に識別する必要があります。 定義クエリをモデルに追加します。 詳細については、「方法: 定義クエリを追加する (Entity Framework)」を参照してください。