EF Core Code First迁移Oracle 11创建Identity列表报错及解决
EF Core Code First迁移Oracle 11时Identity列报错的解决方法
问题场景
使用EF Core Code First迁移向Oracle 11数据库创建包含Identity列的表,执行add-migration后生成的迁移代码如下:
migrationBuilder.CreateTable( name: "Provinces", ////schema: "some schema", columns: table => new { Id = table.Column<int>(type: "NUMBER(10)", nullable: false) .Annotation("Oracle:Identity", "START WITH 1 INCREMENT BY 1"), Title = table.Column<string>(type: "NVARCHAR2(255)", maxLength: 255, nullable: false), Code = table.Column<string>(type: "NVARCHAR2(10)", maxLength: 10, nullable: false), Deleted = table.Column<bool>(type: "NUMBER(1)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Provinces", x => x.Id); });
运行迁移时出现错误提示:missing always keyword for identity column creation
解决方法
无需手动修改迁移代码,只需在数据库配置中设置SQL兼容性版本为Oracle 11对应的版本即可。
具体配置示例(以DbContext的OnConfiguring方法为例):
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseOracle("你的数据库连接字符串", oracleOptions => oracleOptions.UseSQLCompatibility(OracleSQLCompatibility.DatabaseVersion11)); }
说明
Oracle 11与12c及以上版本的Identity列语法存在差异,EF Core默认生成适配高版本的语法。通过指定SQLCompatibility为DatabaseVersion11,EF Core会自动生成符合Oracle 11要求的Identity列创建语句,无需手动调整迁移代码。
内容的提问来源于stack exchange,提问作者KoolKabin
相关产品推荐
相关产品推荐

