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

时间:2014-08-11 16:27:13

标签: c# oracle entity-framework-6 devart dotconnect

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

'BaseAssociation'包含对'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

有人有个主意吗?感谢

1 个答案:

答案 0 :(得分:0)

没有办法做到这一点。但无论如何,约束名称并不那么相关,您可以为每个名称添加一种后缀,如FK_1,FK_2 ... FK_N。如果这非常重要,则必须在不同的模式下创建表。

官方Oracle documentation州:

  

在命名空间中,没有两个对象可以具有相同的名称。

     

以下架构对象共享一个命名空间:

     
      
  •   
  • 浏览
  •   
  • 序列
  •   
  • 私人同义词
  •   
  • 独立程序
  •   
  • 独立存储功能
  •   
  •   
  • 物化视图
  •   
  • 用户定义的类型
  •   
     

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

     
      
  • 索引
  •   
  • 约束
  •   
  • 集群
  •   
  • 数据库触发器
  •   
  • 私人数据库链接
  •   
  • 尺寸
  •   
     

因为表和视图位于同一名称空间,表和视图中   在同一模式中不能具有相同的名称。但是,表和   索引位于不同的名称空间中。因此,一个表和一个索引   在同一模式中可以使用相同的名称。