2011-07-13 27 views

回答

0

一般没有什么具体的说你将不得不使用你的映射来使用mysql和innodb。

切换到innodb引擎是你自己必须从mysql里面做的事情,它与nHibernate没有关系。 http://dev.mysql.com/doc/refman/5.1/en/storage-engine-setting.html

这里有一个例子,我使用的MySQL的(InnoDB的)和NHibernate:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property name="connection.connection_string">Data Source=localhost;Database=test;UID=root;pwd=;</property> 
    <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property> 
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property> 
     <property name="show_sql">false</property> 
     <property name="connection.release_mode">auto</property> 
     <property name="adonet.batch_size">500</property> 
     <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> 
    <property name="hbm2ddl.keywords">none</property> 
    </session-factory> 
</hibernate-configuration> 
+0

如果我使用nhibernate SchemaExport为我创建数据库该怎么办? – Eatdoku

+0

它仍然是相同的配置。我自己使用SchemaExport。 –

+0

如果我想要一个表/列使用InnoDB引擎,而另一个使用MyISAM,该怎么办? – Eatdoku

2

或者你可能想使用此自定义方言

public class MySQL5InnoDBDialect 
     : MySQL5Dialect 
    { 

     public MySQL5InnoDBDialect() 
     { 
      RegisterColumnType(DbType.Guid, "CHAR(36)"); //You don't "really" need this one for what you asked 
     } 

     public override string TableTypeString 
     { 
      get { return " ENGINE=InnoDB"; } 
     } 

     public override bool HasSelfReferentialForeignKeyBug 
     { 
      get { return true; } 
     } 

     public override bool SupportsCascadeDelete 
     { 
      get { return true; } 
     } 
    } 

(相应地更新您的.config文件)

<property name="dialect"> 
Org.Zighinetto.MySQL5InnoDBDialect, Org.Zighinetto 
</property> 

方言把戏工程f当你不拥有MySQL安装(即。你使用共享主机),默认是通常的MyISAM