2009-05-06 5 views
0

Je l'ai utilisé le code suivant pour générer le script de création de base de donnéesgénération de schéma MySql avec 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); 
} 

et sql, il génère bien travaillé avec MS SQL. Quand je devais passer à MySql j'ai changé la configuration 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> 

, mais cette fois-sql généré does't exécuter dans MySQL Query Browser en raison d'erreurs. est Voici un exemple de script de création de MySQL généré par 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) 

J'ai l'erreur suivante lorsque vous essayez d'exécuter

ligne Script: 2 Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre serveur MySQL version pour la bonne syntaxe à utiliser près Ordre chute clé étrangère FK_User_Order

alter table OrderItem drop k étranger ' à la ligne 1

Toutes les idées pourquoi sql généré par Nhiberante ne fonctionnera pas?

Répondre

3

schemaExport.SetDelimiter (";"); si elle doit être délimitée (par exemple pour les exécuter comme des déclarations séparées

Aussi, est-ordre un mot-clé? pouvez-vous remapper l'ordre de commandes dans la base de données, afin d'éviter le conflit mot-clé?

+0

L'utilisateur est aussi un mot-clé Dans MySQL, vous pouvez utiliser des mots-clés comme noms de colonne de table, mais vous devrez alors envelopper le nom avec des caractères. – Trygve

Questions connexes