NHibernate SchemaExport не создает индексы
Мои сопоставления NHibernate включают в себя <database-object>
элемент для определения индексов для MS SQL Server 2008. Проблема в том, что этот SQL не включается в схему при вызове SchemaExport.Create
, Все остальное создается, но индексов нет.
Например, одна из сущностей выглядит так:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2"
name="MyApp.Entities.SomeEntity, MyApp.Entities" table="SomeEntity">
<!- -->
</class>
<database-object>
<create>
CREATE INDEX [Idx_SomeEntityIndex] ON [SomeEntity]
([Field1] ASC, [Field2] ASC) INCLUDE ( [Field3], [Field4], [Field5])
CREATE STATISTICS [Stat_SomeEntityStat] ON [SomeEntity]
([Field1], [Field2])
</create>
<drop>
DROP INDEX [Idx_SomeEntityIndex] ON [SomeEntity]
DROP STATISTICS [Stat_SomeEntityStat]
</drop>
<dialect-scope name="NHibernate.Dialect.MsSql2008Dialect, NHibernate"/>
</database-object>
</hibernate-mapping>
Проблема в том, что раньше это работало (возможно, до перехода с NH2 на NH3), и я не уверен, что что-то изменилось в NHibernate, что мешает этому выполнить.
Диалект соответствует моему диалекту в файле конфигурации.
1 ответ
Решение
Благодаря @OskarBerggren я получил ответ на другом форуме. Проблема была в том, что название сборки (NHibernate
в данном случае) не должно быть указано внутри строки диалекта.
Итак, когда я изменил это:
<dialect-scope name="NHibernate.Dialect.MsSql2008Dialect, NHibernate"/>
к этому:
<dialect-scope name="NHibernate.Dialect.MsSql2008Dialect"/>
это исправило мои проблемы.