2009-05-06 3 views
0

Я использовал следующий код для создания создания базы данных скрипт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 генерируется на этот раз does't выполнить в MySQL Query Browser из-за ошибок. Вот образец создания MySQL скрипт, порожденного NHibernate:

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 версия для корректного синтаксиса использовать рядом с «разнарядке внешнего ключа FK_User_Order

альтер таблица OrderItem падение иностранных к» в строке 1

Любые идеи почему Nhiberante-сгенерированный sql не будет работать?

ответ

3

schemaExport.SetDelimiter (";"); если он должен быть ограничен (т.е. запускать их как отдельные заявления

Кроме того, это заказать ключевое слово? Вы можете переназначить порядок Поручений в базе данных, чтобы избежать конфликта ключевых слов?

+0

Пользователя также ключевое слово в MySql. Вы можете использовать ключевые слова как имена столбцов таблицы, но тогда вам придется обернуть это имя символами ' – Trygve