zoukankan      html  css  js  c++  java
  • 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()获取数据库类型
  • 相关阅读:
    微软软件
    绘图软件安装出错解决方法
    Windows平台 Faster-RCNN 制作自己的数据集
    POJ2456 Agressive Cows
    P1030 求先序排列
    Luogu P2015二叉苹果树
    P2234 [HNOI2002]营业额统计
    Luogu P1347排序
    Luogu P1038神经网络
    Luogu P1006传纸条
  • 原文地址:https://www.cnblogs.com/wumian1360/p/4242743.html
Copyright © 2011-2022 走看看