我在C#app中使用Fluent NHibernate。应用程序在启动时执行SchemaUpdate(config).Execute(false, true)
。
这样可以正常工作,除了它在每次启动时在外键上重新创建索引。例如,我有一个表tblpmr
,其中包含pk keyid
,fk script_id
和fk number
,每个都有一个(自动创建的)索引。
在空数据库上启动应用程序,并创建表/键/索引。第二次启动应用程序,除了前面提到的索引script_id_2
和number_2
之外,第三次运行应用程序,我有索引script_id_3
和number_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但不确定它是否相关。
答案 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)上重现了这个问题。