在流畅的nhibernate中使用SchemaUpdate时创建的重复/冗余索引

时间:2011-11-28 14:01:11

标签: mysql nhibernate c#-4.0 fluent-nhibernate foreign-keys

我在C#app中使用Fluent NHibernate。应用程序在启动时执行SchemaUpdate(config).Execute(false, true)

这样可以正常工作,除了它在每次启动时在外键上重新创建索引。例如,我有一个表tblpmr,其中包含pk keyid,fk script_id和fk number,每个都有一个(自动创建的)索引。

在空数据库上启动应用程序,并创建表/键/索引。第二次启动应用程序,除了前面提到的索引script_id_2number_2之外,第三次运行应用程序,我有索引script_id_3number_3

查看来自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服务器 5.0.51a-24 + lenny5
MySQL Connector / NET 6.4.4
流利的NHibernate 1.3.0.717
NHibernate 3.2.0.4000

我相当确定它是否能“找到”外键然后它会解决问题,但我不知道为什么它不能。我会将mysql-server升级到当前的最新版本,看看是否有帮助。

我找到https://forum.hibernate.org/viewtopic.php?t=948998但不确定它是否相关。

1 个答案:

答案 0 :(得分:0)

似乎是MySQL 5.0没有提供(足够)有关外键所需信息的问题。现在在MySQL 5.1.49-3 (Debian)上正常工作。

如果我上周才知道这件事......

注意:使用MySQL 5.0或MyISAM( MySQL 5.1 (或者我认为更新)引擎必须 InnoDB (使用MySQL 5.0或MyISAM)甚至在5.1)上重现了这个问题。