Я использую 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, но не уверен, что это связано.