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
通过配置文件获取数据库类型,然后根究文件名后缀的不同来加载何种资源文件。
代码如下:
foreach (string resource in mappingAssembly.GetManifestResourceNames())
{
//截取资源文件的数据库类型
int lastIndexOf = resource.LastIndexOf(".hbm.xml");
string dataBaseType = resource.Substring(,lastIndexOf);
dataBaseType = dataBaseType.Substring(dataBaseType.LastIndexOf(".")+); if (GetDatabaseType().ToUpper().Equals("SQLSERVER"))
{
//若资源文件不是SQLSERVER类型,下个循环
if (!dataBaseType.ToUpper().Equals("SQLSERVER"))
{
continue;
}
}
else if (GetDatabaseType().ToUpper().Equals("ORACLE"))
{
//若资源文件不是ORACLE类型,下个循环
if (!dataBaseType.ToUpper().Equals("ORACLE"))
{
continue;
}
}
else if (GetDatabaseType().ToUpper().Equals("MYSQL"))
{
//若资源文件不是MYSQL类型,下个循环
if (!dataBaseType.ToUpper().Equals("MYSQL"))
{
continue;
}
}
else
{
//不是以上三种类型数据库,不加载资源文件
continue;
}
using (Stream stream = mappingAssembly.GetManifestResourceStream(resource))
{
using (StreamReader reader = new StreamReader(stream))
{
_configuration.AddXmlString(reader.ReadToEnd());
}
}
}
其中
mappingAssembly是Assembly类型,
_configuration是NHibernate.Cfg.Configuration类型
GetDatabaseType()获取数据库类型
NHibernate动态加载资源文件的更多相关文章
- 动态加载资源文件(ResourceDictionary)
原文:动态加载资源文件(ResourceDictionary) 在xaml中控件通过绑定静态资源StaticResource来获取样式Style有多种方式: 1.在项目的启动文件App中<App ...
- Style样式的四种使用(包括用C#代码动态加载资源文件并设置样式)
Posted on 2012-03-23 11:21 祥叔 阅读(2886) 评论(6) 编辑 收藏 在Web开发中,我们通过CSS来控制页面元素的样式,一般常用三种方式: 1. 内联样式 ...
- QT下资源使用和资源占用…(可以动态加载资源文件,这样不占内存)
原文地址:关于QT下资源使用和资源占用内存过多的问题作者:技术成就梦想 最近研究了一下如何从外部动态调用图片的问题,从而研究了图片资源的使用方法.网上最常见的帖子是这个,感觉总结的还不错. h ...
- C# System.Reflection.Assembly动态加载资源文件
需求:需要做甘特图的显示,并且在甘特中加载图片.图片太多,写判断代码太多.用反射吧. 核心代码: try { if (stateColour < 0) return null; System.R ...
- 两种动态加载JavaScript文件的方法
两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看 ...
- 【Unity3D】Unity3D之 Resources.Load 动态加载资源
[Unity3D]Unity3D之 Resources.Load 动态加载资源 1.Resources.Load:使用这种方式加载资源,首先需要下Asset目录下创建一个名为Resources的文件夹 ...
- QUiLoader 动态加载.ui文件
动态加载UI文件是指,用 Qt Designer 通过拖拽的方式生产.ui 文件.不用 uic工具把.ui 文件变成等价的 c++代码,而是在程序运行过程中需要用到UI文件时,用 QUiLoader ...
- 详解QUiLoader 动态加载.ui文件
http://blog.chinaunix.net/uid-13838881-id-3652523.html 1.适用情况: 动态加载UI文件是指,用 Qt Designer 通过拖拽的方式生产.ui ...
- 从高德 SDK 学习 Android 动态加载资源
前不久跑去折腾高德 SDK 中的 HUD 功能,相信用过该功能的用户都知道 HUD 界面上的导航转向图标是动态变化的.从高德官方导航 API 文档中 AMapNaviGuide 类的描述可知,导航转向 ...
随机推荐
- Android使用listView,BaseAdapter实现列表页
参考: 1.讲解很详细: blog.csdn.net/psuaije/article/details/7447391 总结: 代码:
- Android学习笔记12:图像渲染(Shader)
在Android中,提供了Shader类专门用来渲染图像以及一些几何图形. Shader类包括了5个直接子类,分别为:BitmapShader.ComposeShader.LinearGradient ...
- 数学:lucas定理的总结
今天考试的题目中有大组合数取模,不会唉,丢了45分,我真是个弱鸡,现在还不会lucas. 所以今天看了一下,定理差不多是: (1)Lucas定理:p为素数,则有: 即:lucas(n,m,p)=c(n ...
- EF中执行存储过程,获取output返回值
EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...
- Text Reverse
Text Reverse Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- 好用的ajax后台框架
dwz 简单实用的国产jquery Ui框架 http://www.j-ui.com/#_blank
- linux debug (DOS模拟器,模拟debug)
最近学习王爽那本<汇编语言>,但其实验均为windows环境,需要用到dos.但最为一个unixer,岂能在windows下开发?所以,要用linux下的工具. 汇编器masm可以用gcc ...
- CC2530芯片介绍
CC2530,体积更小,功能全, C8051内核,使用起来跟平时的单片机没什么两样,就是程序复杂一些,需要一些时日才能看懂,吃透就更长了,而且对于CC2530TI公司提供了一套完整的解决方案,有布线图 ...
- HTML头部<head>学习
元素是所有头部元素的容器. 元素包含了所有的头部标签元素.在 元素中你可以插入脚本(scripts), 样式文件(CSS),及各种meta信息. 以下标签都可以添加到 head 部分: 1.title ...
- CodeIgniter开发实际案例-新闻网站【转】
CodeIgniter开发实际案例-新闻网站 转:http://blog.csdn.net/ict2014/article/details/22104711?utm_source=tuicool&am ...