Генерация схемы MySql с помощью NHibernate - PullRequest
0 голосов
/ 06 мая 2009

Я использовал следующий код для генерации сценария создания базы данных

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 из-за ошибок. Вот пример сценария создания 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 drop иностранных k ' в строке 1

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

1 Ответ

3 голосов
/ 05 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...