Есть ли способ назвать уникальный индекс в Fluent nHibernate? - PullRequest
1 голос
/ 27 декабря 2011

Есть ли способ задать имя для уникального индекса при создании схемы с SchemaExport(config).Build(true, true)?

Я пытался установить в классе отображения:

Map(x => x.Name)
    .Length(50)
    .Not.Nullable()
    .UniqueKey("UNQ_InstitutionTypes_Name");

Но, таким образом, он устанавливаетиндекс, но не устанавливает имя.

1 Ответ

1 голос
/ 27 декабря 2011

Насколько я знаю, пути нет.Я решил эту проблему, используя следующую технику.

При сборке SessionFactory используйте метод ExposeConfiguration, чтобы применить дополнительную конфигурацию к фабрике сеансов:

return Fluently.Configure()
    .ProxyFactoryFactory(typeof(ProxyFactoryFactory))
    .Database(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString)
        .Mappings(m =>
        {
            m.FluentMappings.AddFromAssemblyOf<Entities.BaseEntity>();
            m.FluentMappings.Conventions.AddFromAssemblyOf<Entities.BaseEntity>();
        })
        .ExposeConfiguration((cfg => BuildDatabase(cfg)))
        .BuildSessionFactory();

private static void BuildDatabase(Configuration cfg, IDatabaseConfiguration configurationManager)
{
    cfg.AddXmlFile(@"Mappings\Hbm\Indexes.hbm.xml");
    new SchemaExport(cfg).SetOutputFile(SchemaOutputFileName).Create(false, false);
}

Фактически выглядит файл Indexes.hbm.xml.например:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <database-object>
    <create>
      CREATE NONCLUSTERED INDEX [Idx_TestRun_SerialNumber] ON [dbo].[TestRun]
      (
      [SerialNumber] ASC
      )
    </create>
    <drop></drop>
  </database-object>
</hibernate-mapping>

Вы можете поместить любые допустимые операторы SQL в операторы create / drop.Это удобно, если вам нужно создать индекс с несколькими столбцами в определенном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...