移行
通常、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();
}
}
}