NHibernate动态加载资源文件

最近做项目,又用到了以前做过的ORM框架--NHibernate。

此次想要实现的目标:

1.简单SQL用NHibernate的Session的CRUD方法实现

2.复杂SQL用Native SQL实现

3.数据库可能有多个,且有可能是不同的数据库类型,如A系统用Oracle,B系统用MSSQL

(第一点很简单,可以参照其他博客;本节主要记录第二点第三点,关于如何配置多数据库下次记录)

 

复杂SQL的实现,且针对不同数据库,那么需要加载不同的资源文件。

关于资源文件,请参考http://blog.csdn.net/config_man/article/details/38038249

那么我们需要针对不同的数据库,来过滤资源文件。

想法如下:

Oracle数据库复杂SQL语句文件:XXX.Oracle.hbm.xml、XXX.Oracle.hbm.xml

MSSQL数据库复杂SQL语句文件:XXX.SQLServer.hbm.xml、XXX.SQLServer.hbm.xml

MySQL数据库复杂SQL语句文件:XXX.MySQL.hbm.xml、XXX.SQLServer.hbm.xml

通过配置文件获取数据库类型,然后根究文件名后缀的不同来加载何种资源文件。

代码如下:

 1                     foreach (string resource in mappingAssembly.GetManifestResourceNames())
 2                     {
 3                         //截取资源文件的数据库类型
 4                         int lastIndexOf = resource.LastIndexOf(".hbm.xml");
 5                         string dataBaseType = resource.Substring(0,lastIndexOf);
 6                         dataBaseType = dataBaseType.Substring(dataBaseType.LastIndexOf(".")+1);
 7 
 8                         if (GetDatabaseType().ToUpper().Equals("SQLSERVER"))
 9                         {
10                             //若资源文件不是SQLSERVER类型,下个循环
11                             if (!dataBaseType.ToUpper().Equals("SQLSERVER"))
12                             {
13                                 continue;
14                             }
15                         }
16                         else if (GetDatabaseType().ToUpper().Equals("ORACLE"))
17                         {
18                             //若资源文件不是ORACLE类型,下个循环
19                             if (!dataBaseType.ToUpper().Equals("ORACLE"))
20                             {
21                                 continue;
22                             }
23                         }
24                         else if (GetDatabaseType().ToUpper().Equals("MYSQL"))
25                         {
26                             //若资源文件不是MYSQL类型,下个循环
27                             if (!dataBaseType.ToUpper().Equals("MYSQL"))
28                             {
29                                 continue;
30                             }
31                         }
32                         else
33                         {
34                             //不是以上三种类型数据库,不加载资源文件
35                             continue;
36                         }
37                         using (Stream stream = mappingAssembly.GetManifestResourceStream(resource))
38                         {
39                             using (StreamReader reader = new StreamReader(stream))
40                             {
41                                 _configuration.AddXmlString(reader.ReadToEnd());
42                             }
43                         }
44                     }

其中

mappingAssembly是Assembly类型,
_configuration是NHibernate.Cfg.Configuration类型
GetDatabaseType()获取数据库类型

 

posted @ 2015-01-22 21:17  无眠  阅读(466)  评论(1编辑  收藏  举报