スキャフォールディングまたはリバース・エンジニアリング
ODP.NET EF Coreでは、次の表およびビューのスキャフォールディングがサポートされています。
-
リレーショナル表およびリレーショナル・ビュー
-
マテリアライズド・ビュー
通常、ODP.NET EF Coreでは、Oracle Databaseのデータ型とその特性に基づいて適切な.NETデータ型がマップされます。
スキャフォールド時に、開発者はOracle Databaseと.NET間のデフォルトのデータ型マッピングの変更が必要になることがあります。生成されたエンティティのプロパティの.NET CLR
タイプを変更する場合は、モデル内の自動生成されたHasColumnType()
Fluent APIを削除します。たとえば、Oracle NUMBER(4)
は、デフォルトで.NET Byte
データ型にスキャフォールドされます。.NET CLR
データ型を.NET Short
またはInt16
データ型に変更すると、HasColumnType("NUMBER(4)")
が削除されるまで、実行時に無効なキャスト例外が発生する可能性があります。
データ型マッピング
この表は、デフォルト・マッピングを示しています。
表5-2 ODP.NET Entity Framework Coreリバース・エンジニアリング・データ型のデフォルト・マッピング
Oracle Databaseデータ型 | .NETタイプの別名 | .NETデータ型 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
別のスキーマからの表のスキャフォールディング
開発者は、接続先のユーザー/スキーマ以外のスキーマから表をスキャフォールドできます。接続先のユーザーには、他のスキーマのオブジェクトにアクセスする権限が必要です。これらの権限が付与されると、開発者はEntity Framework Coreのパッケージ・マネージャ・コンソール(PMC)ツールを使用してスキャフォールディング操作を実行できます。次に例を示します。
Scaffold-DbContext "User Id=scott;Password=<password>;Data Source=myhost:1521/mydb;"
Oracle.EntityFrameworkCore -Schemas HR -Tables EMPLOYEES
開発者は、–Schemas
および–Tables
パラメータを使用して、Entity Framework Coreモデルについてスキャフォールドするスキーマおよび表/ビューを指定できます。あるユーザー/スキーマに接続して2つ目のスキーマから表を作成する場合、そのユーザーには、その2つ目のスキーマに対するSELECT
以上の権限が必要です。
次の表に、Package Manager ConsoleコマンドScaffold-DbContext
を使用した既存のモデルのスキャフォールド中に、–Schemas
または–Tables
パラメータ(あるいはその両方)を指定するか、デフォルトのままにした場合のODP.NET Entity Framework Coreの動作を示します。次のすべてのサンプル・コマンドの抜粋では、Scaffold-DbContext
構文を使用します。EF Coreツール・コマンドdotnet ef dbcontext scaffold
を使用すると、同様の機能が使用できます。
表5-3 スキーマ・フィルタと表フィルタのマッピング
スキーマ・フィルタと表フィルタのマッピング | スキーマ・フィルタなし | スキーマ・フィルタ |
---|---|---|
表フィルタなし |
現在のユーザー/スキーマ内のすべての表/ビューを生成します ボックス1 |
指定されたユーザー/スキーマ内のすべての表/ビューを生成します ボックス2 |
表フィルタ |
現在のユーザー/スキーマ内の指定された表/ビューを生成します ボックス3 |
現在のスキーマ内の指定された表/ビューおよび指定されたユーザー/スキーマ内のすべての表/ビューを生成します フィルタされた結果には、ボックス2とボックス3の結果の組合せが含まれます。 |
他のスキーマの表/ビューをスキャフォールドするには、スキーマ名を前に付加して-Tables <schema>.<table/view>
とします。
たとえば、次のスニペットは3つの異なるスキーマの3つの表をスキャフォールドします。
-Tables SCHEMA1.TABLEA, SCHEMA2.TABLEB, SCHEMA3.TABLEC
スキーマ名または表名にピリオドなどの特殊文字が含まれている場合は、–Tables
オプションを使用するときに、大カッコを使用してスキーマ名および表名を区切ります。
-Tables [SCHEMA1].[TABLEA]
ビューのスキャフォールディング
データベースのリレーショナル・ビューとマテリアライズド・ビューのスキャフォールディングのみがサポートされています。これらのビューは、読取り専用または更新可能にすることができます。-Tables
パラメータを使用して、スキャフォールドするビューを指定します。パラメータを空白(デフォルト)のままにすると、すべてのユーザー表、リレーショナル・ビューおよびマテリアライズド・ビューがスキャフォールドされます。