【问题标题】:ORA-00972: identifier is too long error with EF Core 2.2 code first migrationORA-00972: EF Core 2.2 代码首次迁移时标识符太长错误
【发布时间】:2020-09-28 04:41:06
【问题描述】:

我在 EF core 2.2 中使用代码优先迁移,我可以通过 create 命令创建迁移文件,但是在使用数据库更新命令时,它会抛出错误(ORA-00972:标识符太长)。我在网上查了一下,发现 oracle 有 30 个字符的限制,而我所有的表名都小于 30 个字符。经过分析,我发现在自动创建外键关系名称并且长度超过 30 个字符时会产生问题。

所以我的问题是,我们是否可以在模型构建器的帮助下将这些自动创建的数据库关系名称缩减为 30 个字符?

【问题讨论】:

    标签: c# oracle .net-core ef-code-first database-migration


    【解决方案1】:

    Oracle 数据库版本早于 12.2.0.1 时会出现此错误,因为从 Oracle 数据库 12.2.0.1 开始,标识符可以有 128 个字符:

    12.2.0.1 doc says

    长标识符

    对于大多数标识符,标识符的最大长度增加到 128 个字节,高于之前版本的 30 个字节。

    提供更长的标识符使客户在定义其命名方案时具有更大的灵活性,例如更长且更具表现力 表名。具有更长的标识符还可以启用对象名称 具有不同字符集的数据库之间的迁移,例如 泰语到 Unicode。

    您可以尝试选择更新的 Oracle 版本,例如 19c,它的支持时间比 12.1 或 12.2.0.1 或 18c 长。

    【讨论】:

    • 是的,您写的是长度限制限制,但由于公司政策,我必须使用相同的 oracle 版本。
    【解决方案2】:

    您好,我在 oracle 网站上找到了解决方案,如下所示:

    // 按照 Oracle 限制 30 个字符长度

    modelBuilder.Model.Relational().MaxIdentifierLength = 30;

    您只需在构建模型的地方编写此代码,它就会将您自动创建的所有关系缩减为 30 个字符。修剪后会保持唯一性,以防出现重复。

    【讨论】:

    • 对于dotnet core 3.1,需要编写以下代码:: modelBuilder.Model.SetMaxIdentifierLength(30);
    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2012-07-09
    • 2017-04-09
    相关资源
    最近更新 更多