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

C# dotConnect Oracle:对同一表的多个引用使用相同的外键约束名称,c#,oracle,entity-framework-6,devart,dotconnect,C#,Oracle,Entity Framework 6,Devart,Dotconnect,首先,我在EF6代码中有一个相当复杂的数据库模型(大约100个实体)。 这些实体中的一个称为“基”,另一个称为“基关联”“基本关联”在“基本”对象之间建立多对多关系。附加到“BaseAssociation”对象的是“BaseAssociationAttribute”对象,它为关联提供元数据 “BaseAssociation”包含对“Base”表的两个引用,“AssociatedBy”和“AssociatedWith”。在使用Devart dotConnect(8.4.215)在Oracle数据库

首先,我在EF6代码中有一个相当复杂的数据库模型(大约100个实体)。 这些实体中的一个称为“基”,另一个称为“基关联”“基本关联”在“基本”对象之间建立多对多关系。附加到“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


有人有主意吗?谢谢

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

官方声明:

在命名空间中,任何两个对象都不能具有相同的名称

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

  • 桌子
  • 观点
  • 序列
  • 私人同义词
  • 独立程序
  • 独立存储函数
  • 包裹
  • 物化视图
  • 用户定义类型
以下每个架构对象都有自己的命名空间:

  • 索引
  • 约束条件
  • 数据库触发器
  • 专用数据库链接
  • 尺寸
由于表和视图位于同一命名空间中,因此表和视图 在同一架构中,不能具有相同的名称。但是,表和 索引位于不同的名称空间中。因此,需要一个表和一个索引 在同一架构中,可以使用相同的名称


嗨,亚历山德罗,谢谢你的回答。我知道不能有多个同名约束。我的问题是dotConnect生成sql代码,因此我对此没有任何影响。我只是不知道为什么它会在这种特殊情况下生成这种明显错误的代码,在其他情况下它工作得非常好。我想知道这是否是dotConnect中的一个bug,是否有其他人也有同样的问题。我对dotConnect没有准备。我想,如果没有改变约束名称模式的选项,这应该是在Oracle上构建模式的模块的一个bug