1、sql2000和sql2005相差不多
需要更改的只有一个地方: dialect方言改为2000或2005
2、sqlserver与oracle相差较多
第一、dialect方言;改为NHibernate.Dialect.Oracle10gDialect
第二、connection.driver_class;
改为NHibernate.Driver.OracleClientDriver
第三、添加query.substitutions;
值为 true 1, false 0, yes 'Y', no 'N'
第四、oracle数据库表的名称全为大写、且对大小写特别敏感,一定要注意拼写;要把所有HQL语句换为大写
第五、oracle里的数据类型跟sqlserver和.net里不大一样,该系统里牵涉到的两个:
一是Guid类型,oracle里没有oracle,网上资料有的提示对应的类型为RAW(16)或CHAR(38);首先是RAW(16)可以跟Guid类型对应,但是数据库表里的值跟从数据库表里读出来显示到网页上的值不一样,因此,在本次日志移植测试时,使用的VCHAR(50);就是将Guid类型转换为string字符串类型,传到数据库表中,再将其读出,即可得到一致的数值。
二是DataTime类型,因为oracle里日期的格式根据具体的回话环境而定,一般采用默认形式,跟.net里的不一样,需要做下转换。具体操作如下:
首先、查一下当前oracle的日期格式:默认为08-6月-11
其次、要修改sql语句,即在sql语句日期类型的前面加上TO_DATE(’2011-06-8’,’'YYYY-MM-DD');注意TO_DATE一定要大写;这样才可以被oracle识别
小结:可能在其他的方面有关oracle的Nhibernate操作还要修改sql语句,目前没发现持久层是否可以提供一种方式,可以只是修改配置文件不动sql语句,也就是只用HQL语句来完成所有数据库之间的移置