スキャフォールディングまたはリバース・エンジニアリング

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データ型

NUMBER(1)

bool

System.Boolean

NUMBER(2)からNUMBER(4)

byte

System.Byte

NUMBER(5)

short/int16

System.Int16

NUMBER(6)からNUMBER(10)

int/int32

System.Int32

NUMBER(11)からNUMBER(19)

long/int64

System.Int64

NUMBER(>19)

decimal

System.Decimal

NUMBER(p,s)

decimal

System.Decimal

NUMBER

decimal

System.Decimal

BINARY_FLOAT

float

System.Float

BINARY_DOUBLE

double

System.Double

TIMESTAMP

DateTime

System.DateTime

TIMESTAMP WITH TIMEZONE

DateTimeOffset

System.DateTimeOffset

TIMESTAMP WITH LOCAL TIMEZONE

DateTimeOffset

System.DateTimeOffset

DATE

Date

System.Date

INTERVALDAYTOSECOND

TimeSpan

System.Timespan

INTERVALYEARTOMONTH

string

System.String

VARCHAR2

string

System.String

JSON

string

System.String

NVARCHAR2

string

System.String

CHAR

string

System.String

NCHAR

string

System.String

CLOB

string

System.String

NCLOB

string

System.String

RAW

byte[]

System.Byte[]

BLOB

byte[]

System.Byte[]

XMLTYPE

string

System.String

ROWID

string

System.String

UROWID

string

System.String

LONG

string

System.String

BFILE

byte[]

System.Byte[]

LONG RAW

byte[]

System.Byte[]

別のスキーマからの表のスキャフォールディング

開発者は、接続先のユーザー/スキーマ以外のスキーマから表をスキャフォールドできます。接続先のユーザーには、他のスキーマのオブジェクトにアクセスする権限が必要です。これらの権限が付与されると、開発者は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パラメータを使用して、スキャフォールドするビューを指定します。パラメータを空白(デフォルト)のままにすると、すべてのユーザー表、リレーショナル・ビューおよびマテリアライズド・ビューがスキャフォールドされます。