Дублирующиеся / избыточные индексы, созданные при использовании SchemaUpdate в беглом nhibernate - PullRequest
0 голосов
/ 28 ноября 2011

Я использую Fluent NHibernate в приложении C #. Приложение запускает SchemaUpdate(config).Execute(false, true) при запуске.

Это прекрасно работает, за исключением того, что при каждом запуске он заново создает индексы для внешних ключей.Например, у меня есть таблица tblpmr, в которой есть pk keyid, fk script_id и fk number с (автоматически созданным) индексом для каждого.

Запуск приложения на пустой БДи таблицы / ключи / индексы созданы нормально.Запустите приложение во второй раз, и в дополнение к ранее упомянутым индексам у меня есть script_id_2 и number_2, запустите приложение в третий раз, и у меня есть индексы script_id_3 и number_3 и т. Д.

Lookingв журналах от NHibernate у меня есть следующее:

INFO|NHibernate.Dialect.Schema.ITableMetadata|table found: proscript.tblpmr
INFO|NHibernate.Dialect.Schema.ITableMetadata|columns: keyid, is_private, itemref, date, endtext, label, drug, qty, time, doctor, dispensed, cost, dendorse, xml, hostname, script_id, number
INFO|NHibernate.Dialect.Schema.ITableMetadata|foreign keys: 
INFO|NHibernate.Dialect.Schema.ITableMetadata|indexes: primary, script_id, number
DEBUG|NHibernate.Tool.hbm2ddl.SchemaUpdate|alter table scriptList add index (patient_id), add constraint FK64CEF4C96630C63A foreign key (patient_id) references tblpatients (number)
DEBUG|NHibernate.Tool.hbm2ddl.SchemaUpdate|alter table scriptList add index (home), add constraint FK64CEF4C9F35E7604 foreign key (home) references tblhomes (hnumber)
DEBUG|NHibernate.Tool.hbm2ddl.SchemaUpdate|alter table scriptList add index (box), add constraint FK64CEF4C97558FD5E foreign key (box) references boxList (boxid)
DEBUG|NHibernate.Tool.hbm2ddl.SchemaUpdate|alter table scriptLog add index (script_id), add constraint FK1C14488375FD47E6 foreign key (script_id) references scriptList (script_id)
DEBUG|NHibernate.Tool.hbm2ddl.SchemaUpdate|alter table tblpatients add index (home), add constraint FKD51976E2F35E7604 foreign key (home) references tblhomes (hnumber)
DEBUG|NHibernate.Tool.hbm2ddl.SchemaUpdate|alter table tblpmr add index (script_id), add constraint FKF9AD750975FD47E6 foreign key (script_id) references scriptList (script_id)
DEBUG|NHibernate.Tool.hbm2ddl.SchemaUpdate|alter table tblpmr add index (number), add constraint FKF9AD750967947BA8 foreign key (number) references tblpatients (number)

Похоже, что он не может найти существующие внешние ключи как часть метаданных таблицы и как часть создания новых внешних ключей он также добавляет индекс дляэто (дубликат).

Я пытался использовать таблицы MyISAM и InnoDB без различий.

MySQL Server 5.0.51a-24 + lenny5
MySQL Connector / NET 6.4.4
Свободный NHibernate 1.3.0.717
NHibernate 3.2.0.4000

Я вполне уверенесли он может «найти» внешние ключи, то это решит проблему, но я понятия не имею, почему он не может.Я обновлю mysql-сервер до любой текущей версии, чтобы посмотреть, поможет ли это.

Я нашел https://forum.hibernate.org/viewtopic.php?t=948998, но не уверен, что это связано.

1 Ответ

0 голосов
/ 28 ноября 2011

Кажется, что проблема с MySQL 5.0 не обеспечивает (достаточно) информации, необходимой для внешних ключей. Отлично работает сейчас на MySQL 5.1.49-3 (Debian).

Если бы я только понял это на прошлой неделе ...

Примечание : двигатель должен быть InnoDB на MySQL 5.1 (или, как я полагаю, новее) с использованием MySQL 5.0 или MyISAM (даже на 5.1 ) воспроизводит проблему.

...