2017-02-10 14 views
1

Вопрос
Как сопоставить базу данных набора словарей с той же конфигурацией .hbm?Отображение словаря NHibernate без первичного ключа

Сценарий
Я пытаюсь отобразить свойство словаря:

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

со следующей конфигурацией: .hbm

<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> 

и Ниже приводится таблица создания SQL из [ATTRIBUTE_LOCALE ] для 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 Primary Key.

Как я могу решить эту проблему?

ответ

0

Мой коллега рекомендует мне настроить схему таблицы.

  1. Удалить столбец CUID и FIELD_NAME
  2. Пусть RESOURCE_ID и LOCALE_NAME быть составной ключ.
  3. Позвольте RESOURCE_ID быть составным и иностранным ключом в то же время.

Действительно, вышеуказанный подход может решить мою проблему, но я не вижу такой схемы схемы данных или нет.

Я был бы признателен, если у кого-нибудь есть какие-либо советы для меня об этой схеме схемы данных.

2

Вы можете сопоставить ATTRIBUTE_LOCALE таблицу с native генератора, а не identity:

Для кросс-платформенной разработки, родная стратегия будет выбрать одну из стратегий идентичности, последовательности и Хило, зависит от возможностей базовая база данных (ref).

Оракул не поддерживает понятие столбца идентификации. Если вы используете SQL Server 2012+, вы можете использовать последовательности, а не идентификаторы. Это будет более согласовано с Oracle и, возможно, является лучшей стратегией генерации ключей ORM-мудрой.

+0

В моем требовании ATTRIBUTE_LOCALE необходимо сопоставить свойство словаря. Я не могу добавить .hbm и домен для ATTRIBUTE_LOCALE. Кроме того, в конфигурации .hbm этот использовал собственный генератор для обработки первичного ключа oracle. –