首页 > 代码库 > NHibernate动态加载资源文件
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 else33 {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()获取数据库类型
NHibernate动态加载资源文件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。