移行
通常、ODP.NET EF Coreでは、.NETのデータ型とその特性に基づいて適切なデータベース・データ型がマップされます。この表は、デフォルト・マッピングを示しています。Fluent API/注釈を使用して、.NETタイプを有効なOracleデータ型にマップできます。
この表は、デフォルト・マッピングを示しています。Fluent APIおよびデータ注釈を使用して、.NETタイプを有効なOracleデータ型にマップできます。
表5-1 ODP.NET Entity Framework Core移行データ型のデフォルト・マッピング
.NETタイプの別名 | .NETデータ型 | 必要なFluent API * | Oracle Databaseデータ型 |
---|---|---|---|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
なし |
|
|
|
|
|
|
|
|
|
|
|
なし |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
なし |
|
* 指定したFluent APIのかわりに、対応するデータ注釈を使用することもできます。
NCHAR
およびNVARCHAR2
では、文字長セマンティクスが使用されます。これらのデータ型のいずれかを使用する列の文字数は、文字セットNLS_NCHAR_CHARACTERSET
によって決まります。ODP.NET Entity Framework Coreは2バイトの文字セットにデフォルト設定されるため、NCHAR
列およびNVARCHAR2
列では最大2000文字が使用できます。文字列エンティティ・プロパティに[Maxlength(4000)]データ注釈またはFluent APIが使用される場合、指定された長さが2000文字を超えるため、ODP.NETではプロパティをNCLOB
型にマップします。
たとえば、データベースNLS_NCHAR_CHARACTERSET
にNVARCHAR2(4000)
列がある場合、またはNVARCHAR2
列の最大長が32 KB (つまり、MAX_STRING_SIZE = EXTENDED
)の場合、文字列エンティティ・プロパティでは、デフォルトのNCLOB
にマップするのではなく、[Column]データ注釈またはFluent APIを使用してN文字データ型にマップできます。次に、このような注釈の使用例を示します。
[Column("Name", TypeName = "NVARCHAR2(4000)")] string EmployeeName
アプリケーションでは、NCLOB
よりN文字データ型が優先されます。これは、データをフェッチして更新するのに追加のサーバー・ラウンドトリップが不要なためです。
Synonyms
EF Core移行では、RelationalDatabaseFacadeExtensions
クラスを使用して任意のOracleスキーマ・オブジェクトを生成できます(ExecuteSqlRaw
メソッドを使用してそれらのオブジェクトに対してDDLを実行するなど)。たとえば、サンプル表Blogsのシノニムを作成するには、次のコード・スニペットを使用できます。
private static void SetupDatabase() { using (var db = new BloggingContext()) { db.Database.EnsureDeleted(); if (db.Database.EnsureCreated()) { //other code #region Synonym db.Database.ExecuteSqlRaw( " create synonym s for \"Blogs\";"); #endregion db.SaveChanges(); } } }