使用NHibernate生成MySql模式

时间:2009-05-06 10:48:38

标签: mysql nhibernate

我使用以下代码生成数据库创建脚本

Configuration configuration = new Configuration();
configuration.Configure();
SchemaExport schemaExport = new SchemaExport(configuration);
using(TextWriter stringWriter = new StreamWriter("create.sql"))
{
   schemaExport.Execute(false, false, false, true, null, stringWriter); 
}

和sql,它生成的MS SQL运行良好。当我不得不转移到MySql时,我已将NHibernate配置更改为:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
  <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
  <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
  <property name="connection.connection_string">Server=localhost;Database=db;User ID=root;Password=sa;</property>
  <property name="dialect">NHibernate.Dialect.MySQLDialect</property>
</session-factory>

但是这次生成的sql因为错误而无法在MySQL Query Browser中执行。 这是Nhibernate生成的mysql创建脚本示例:

alter table Order  drop foreign key FK_User_Order
alter table OrderItem  drop foreign key FK_Order_Item
alter table Item  drop foreign key FK742DC178AD99756A

drop table if exists User
drop table if exists Order
drop table if exists OrderItem
drop table if exists Item
drop table if exists Category
create table User (
  Id INTEGER NOT NULL AUTO_INCREMENT,
   role INTEGER not null,
   is_active TINYINT(1) not null,
   contact_name VARCHAR(100),
   phone VARCHAR(100),
   address VARCHAR(100),
   email VARCHAR(100) not null,
   name VARCHAR(100) not null,
   password_hash LONGBLOB not null,
   login VARCHAR(100) not null unique,
   is_new TINYINT(1) not null,
   price_type INTEGER not null,
   access_id INTEGER not null,
   primary key (Id) 

尝试执行时出现以下错误

  

脚本行:2您有错误   你的SQL语法;检查手册   对应于您的MySQL服务器   用于正确语法的版本   靠近'Order drop foreign key   FK_User_Order

     

alter table OrderItem drop foreign k'   在第1行

为什么Nhiberante生成的sql不起作用的任何想法?

1 个答案:

答案 0 :(得分:3)

schemaExport.SetDelimiter( “;”);如果它需要分隔(即将它们作为单独的陈述运行

另外,订购关键字是什么?您可以将订单重新映射到数据库中的订单,以避免关键字冲突吗?