Как создать многостолбцовый индекс или уникальное ограничение с помощью NHibernate - PullRequest
13 голосов
/ 07 мая 2009

Как создать многостолбцовый индекс и / или уникальное ограничение, используя NHibernate Mapping или Fluent NHibernate.

Ответы [ 2 ]

14 голосов
/ 18 августа 2011

Старый, но мне есть что добавить, так как я столкнулся с такой же проблемой:

Stefan Steinegger правильно ответил для не -уникальных многоколоночных индексов, но не учел код для уникальных многоколоночных индексов. Для тех, кого вы можете использовать:

<property name="A" unique-key="AB" />
<property name="B" unique-key="AB" />

Итак, по сути, то же самое, но с другим именем атрибута.


Интересно отметить, что для уникальных индексов NHibernate генерирует свое собственное имя для ключа, но для неуникальных индексов он использует все, что вы ему даете.

Например, приведенный выше код НЕ будет генерировать уникальный индекс с именем «AB», а скорее будет выглядеть как UQ__TableName__7944C87104A02EF4.

Это описано в разделе 19.1.1 документации NHibernate:

Некоторые теги принимают атрибут index для указания имени Индекс для этого столбца. Атрибут unique-key можно использовать для группировки столбцы в ограничении единичного ключа. В настоящее время указанный значение атрибута уникального ключа не , используемое для именования ограничения, только для группировки столбцов в файле сопоставления.

Однако следующее:

<property name="A" index="AB" />
<property name="B" index="AB" />

просто сгенерирует индекс с именем "AB".

14 голосов
/ 07 мая 2009

назначить индекс / уникальное имя ограничения более чем одному свойству

<property name="A" index="AB" />
<property name="B" index="AB" />

Теоретически это также будет работать с наличием более одного индекса на одну и ту же сущность:

<property name="A" index="AB, ABC" />
<property name="B" index="AB, ABC" />
<property name="C" index="ABC" />

Но есть ошибка. Я тоже написал патч. если вы заинтересованы в этом, пожалуйста, проголосуйте за ошибку или добавьте комментарий или что-то еще.

Редактировать : только что проверил, что случилось с ошибка . Это исправлено в версии 2.1.0, поэтому теперь оно должно отлично работать. Большое спасибо великолепной команде разработчиков NHibernate!

...