0

最初に EF6 コードにかなり複雑なデータベース モデル (約 100 エンティティ) があります。これらのエンティティの 1 つは「Base」と呼ばれ、別の「BaseAssociation」と呼ばれます。「BaseAssociation」は、「Base」オブジェクト間に多対多の関係を確立します。「BaseAssociation」オブジェクトには、関連付けのメタデータを提供する「BaseAssociationAttribute」オブジェクトが添付されています。

「BaseAssociation」には、「Base」テーブルへの 2 つの参照、「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サーバーのセットアップで実行されたのに対し、すべて正常に動作します. どういうわけか、単純なモデルではこれを再現できず、他のすべての制約名はデフォルトのスキーマに従っています。コード ファーストの規則には触れませんでしたが、「長いデフォルト名を切り捨てる」、「スキーマ名を無視する」、および「列型の大文字と小文字の規則の互換性」を有効にしました。

私はEF6.1.1、dotconnect 8.4.215を使用しています

誰でもアイデアを得ましたか?ありがとう

4

1 に答える 1

0

それを行う方法はありません。とにかく、制約名はそれほど関連性がありません。FK_1、FK_2 ... FK_N のように、それぞれの名前に一種の接尾辞を追加できます。これが非常に重要な場合は、異なるスキーマでテーブルを作成する必要があります。

Oracleの公式ドキュメントには次のように記載されています。

名前空間内では、2 つのオブジェクトが同じ名前を持つことはできません。

次のスキーマ オブジェクトは、1 つの名前空間を共有します。

  • テーブル
  • ビュー
  • シーケンス
  • プライベートシノニム
  • スタンドアロン手順
  • スタンドアロンのストアド ファンクション
  • パッケージ
  • マテリアライズド ビュー
  • ユーザー定義型

次の各スキーマ オブジェクトには、独自の名前空間があります。

  • インデックス
  • 制約
  • クラスター
  • データベース トリガー
  • プライベート データベース リンク
  • 寸法

テーブルとビューは同じ名前空間にあるため、同じスキーマ内のテーブルとビューに同じ名前を付けることはできません。ただし、テーブルとインデックスは異なるネームスペースにあります。したがって、同じスキーマ内のテーブルとインデックスは同じ名前を持つことができます。

于 2014-08-11T16:49:07.357 に答える