2017-02-10 3 views
1

質問
同じ.hbm設定の辞書コレクションクロスデータベースをマップする方法はありますか?プライマリキーのないNHibernate辞書マッピング

シナリオ
私は辞書プロパティにマップしようとしています:以下.hbm構成で

Dictionary<string, string> Phrases { set; get; } 

を:

<map 
    name="Phrases" 
    cascade="save-update" 
    table="ATTRIBUTE_LOCALE" 
    lazy="true"> 
     <key column="RESOURCE_ID" /> <!-- foreign key --> 
     <index column="LOCALE_NAME" type="string" /> 
     <element column="PHRASE" type="string" /> 
</map> 

と以下の表は[ATTRIBUTE_LOCALEのSQLを作成することです] for MS SQL:

CREATE TABLE ATTRIBUTE_LOCALE ( 
    CUID int IDENTITY(1, 1) NOT NULL, 
    RESOURCE_ID int NOT NULL, 
    FIELD_NAME nvarchar(255) DEFAULT 'VALUE' NOT NULL, 
    LOCALE_NAME nvarchar(255) NOT NULL, 
    PHRASE ntext NULL 
); 

データベースをMS SQL ServerからOracleおよびOracleデータベースに変更した場合、IDENTITY(1,1)を使用して主キーを自動的に生成することはできません。 Oracleでは、NULLプライマリキーを持つテーブルを挿入するためにいくつか問題が発生します。

どうすればこの問題を解決できますか?あなたはむしろidentityよりnativeジェネレータでATTRIBUTE_LOCALEテーブルをマップすることができ

答えて

0

私の同僚はテーブルのスキーマを調整することをお勧めします。

  1. CUIDFIELD_NAME
  2. RESOURCE_IDLOCALE_NAME複合キーとするを削除します。
  3. RESOURCE_IDを複合キーとし、外部キーとしてください。

確かに上記のアプローチは私の問題を解決することができますが、私はこのデータスキーマ設計が良いかどうかはわかりません。

誰かがこのデータスキーマデザインについてアドバイスをいただければ幸いです。

2

:クロスプラットフォーム開発のために

、ネイティブの戦略はの能力に依存して、アイデンティティ、sequence、hilo戦略の中から選択します基礎データベース(ref)。

Oracleは、識別列の概念をサポートしていません。 SQL Server 2012以降を使用している場合は、IDではなくシーケンスを使用できます。これはOracleとの一貫性があり、間違いなく、より良い鍵生成戦略ORMになります。

+0

私の要件では、ATTRIBUTE_LOCALEはDictionaryプロパティをマップする必要があります。 ATTRIBUTE_LOCALEの.hbmとドメインを追加できません。さらに、.hbm構成には、このが含まれており、ネイティブ・ジェネレータを使用してOracleの主キーが処理されています。 –

関連する問題