dotConnect Oracle:对同一表的多个引用使用相同的外键约束名称

本文关键字:约束 Oracle dotConnect 引用 | 更新日期: 2023-09-27 18:17:24

我首先在EF6代码中有一个相当复杂的数据库模型(大约100个实体)。其中一个实体称为"Base",另一个称为"baseasassociation"。' basassociation '在'Base'对象之间建立多对多关系。附加到' baseasassociation '对象的是'BaseAssociationAttribute'对象,它为关联提供元数据。

' baseasassociation '包含两个对'Base'表的引用,'AssociatedBy'和'AssociatedWith'。当使用Devart dotConnect(8.4.215)在Oracle数据库上创建数据库模型时,两个引用的外键约束具有相同的名称。通常,命名由实体类型和属性名组成。但不知何故,我的情况似乎坏了。dotConnect生成以下sql:

ALTER TABLE "BaseAssociations"
  ADD CONSTRAINT "FK_Base_BaseAssociation" FOREIGN KEY ("AssociatedByRef") REFERENCES "Base" ("Id")
ALTER TABLE "BaseAssociations"
  ADD CONSTRAINT "FK_Base_BaseAssociation" FOREIGN KEY ("AssociatedWithRef") REFERENCES "Base" ("Id")

不知何故,两个外键被赋予了相同的约束名称。

在sql server上执行,一切正常。不知何故,我无法用一个更简单的模型重现这个模型,并且所有其他约束名称都遵循默认模式。我没有触及任何代码优先约定,但启用了"截断长默认名称","忽略模式名称"和'列型大小写约定兼容性'.

我使用EF6.1.1, dotconnect 8.4.215

有人知道吗?由于

dotConnect Oracle:对同一表的多个引用使用相同的外键约束名称

没有办法。但是无论如何,约束名称不是那么相关,你可以在每个名称后面加上后缀,比如FK_1, FK_2…FK_N。如果这很重要,那么必须在不同的模式下创建表。

Oracle官方文档说明:

在一个命名空间内,不能有两个对象具有相同的名称。

以下模式对象共享一个命名空间:

    <
  • 表/gh>
  • 私人同义词
  • <
  • 独立程序/gh>
  • 独立存储函数
  • <
  • 包/gh>
  • 物化视图
  • 用户定义类型

以下每个模式对象都有自己的命名空间:

  • 集群
  • 数据库触发器
  • 私有数据库链接
  • <
  • 维度/gh>

因为表和视图在同一个命名空间中,表和视图在同一模式中不能有相同的名称。然而,表格和索引位于不同的名称空间中。因此,一个表和一个索引在同一个模式中可以有相同的名称。