識別子名の長さと一意性
Oracle Databaseでは、表名、列名、主キー名などの識別子名が128バイトまでに制限されています。Oracle Entity Framework Coreでは、表名を除き、長すぎる識別子名は自動的に切り捨てられてこの指定された長さになります。これにより、ユーザーやEntity Framework CoreによってOracle Databaseの最大文字数制限を超える識別子が作成されることがなくなり、ほとんどの場合、「ORA-00972: 識別子が長すぎます。」エラーが発生しなくなります。
識別子にマルチバイト文字が使用されている場合は、Oracleデータベースですべての識別子を作成できるように、最大識別子長を、文字拡張率を考慮して設定する必要があることがあります。たとえば、Oracleデータベースの文字セットがUTF8の場合は、1文字に最大4バイトが必要です。したがって、長い識別子をサポートしていないOracleデータベースですべての識別子を作成できるようにするには、RelationalAnnotationNames
のMaxIdentifierLength
フィールドを32バイト(つまり、128バイトを4で割った値)に設定します。デフォルトでは、Oracle EF CoreのMaxIdentifierLength
の値は128です。
ご使用のデータベース・バージョンでサポートされている長さを超えた識別子名をEF Coreモデルで使用していない場合でも、MaxIdentifierLength
をより小さい値に設定することを検討する必要があります。ODP.NETおよびEntity Framework Coreでは、モデルからスキーマ・オブジェクト名が自動生成されます。場合によっては、データベースで許可されている最大文字数を超えて名前に文字を追加できます。MaxIdentifierLength
を設定すると、不注意によってEF CoreでORA-00972エラーが発生することを防止できます。