加载的DAL数据访问层的类型
using System;
using System.Collections;
using System.Reflection;
using CSFrameworkV4_5.Core;
using CSFrameworkV4_5.Core.CodeGenerator;
using CSFrameworkV4_5.Server.DataAccess.DAL_Base; namespace CSFrameworkV4_5.Server.DataAccess
{ /// <summary>
/// 加载的DAL数据访问层的类型,注意:此类必须放在数据访问层模块
/// </summary>
public static class DALTypeLoader
{
//哈希表, 保存已加载的DAL类的引用地址
private static Hashtable _LoadedDalTypes = null; //数据访问层的程序集
private static Assembly _DALAssembly = null; /// <summary>
/// 数据访问层的程序集
/// </summary>
public static Assembly DALAssembly
{
get
{
if (DALTypeLoader._DALAssembly == null)
DALTypeLoader._DALAssembly = typeof(DALTypeLoader).Assembly; return DALTypeLoader._DALAssembly;
}
} static DALTypeLoader()
{
_LoadedDalTypes = new Hashtable();
} /// <summary>
/// 跟据DAL类名创建数据层实例
/// </summary>
/// <param name="derivedClassName">DAL类名,如:CSFrameworkV4_5.Server.DataAccess.DAL_Business.dalSO</param>
/// <returns></returns>
internal static Type GetDALTypeByClassName(string derivedClassName)
{
Type T = DALTypeLoader.DALAssembly.GetType(derivedClassName, true, true);
return T;
} /// <summary>
/// 根据表名获取对应的DAL层
/// </summary>
/// <param name="tableName">表名</param>
/// <returns></returns>
internal static Type GetDALTypeByTableName(string tableName)
{
Type _DAL_Type = null; #region 获取DAL的Type类型 //哈希表存在该类,从哈希表取出.
if (_LoadedDalTypes.ContainsKey(tableName))
_DAL_Type = _LoadedDalTypes[tableName] as Type;
else
{
//获取DataAccess程序集中所有Public类
Type[] types = DALTypeLoader.DALAssembly.GetExportedTypes(); //枚举程序集中所有Public类
foreach (Type T in types)
{
//只查找dalBaseDataDict的子类
if (false == T.IsSubclassOf(typeof(dalBaseDataDict))) continue; //查找DefaultORM_UpdateMode特性
object[] atts = T.GetCustomAttributes(typeof(DefaultORM_UpdateMode), false);
if ((atts == null) || (atts.Length == )) continue; //该类有定义DefaultORM_UpdateMode特性
DefaultORM_UpdateMode att = atts[] as DefaultORM_UpdateMode;
if (ORM_Tools.GetTableName(att.ORM) == tableName)
{
_DAL_Type = T;
break;
}
} //第一次加载后添加到哈希表中, 基于性能优化.
if (_DAL_Type != null) _LoadedDalTypes.Add(tableName, _DAL_Type);
}
#endregion return _DAL_Type;
} /// <summary>
/// 根据ORM模型类全名获取对应的DAL层
/// </summary>
/// <param name="ORM_TypeName"></param>
/// <returns></returns>
internal static Type GetDALTypeByORM(string ORM_TypeName)
{
Type _DAL_Type = null; #region 获取_DAL_Type
//哈希表存在该类,从哈希表取出.
if (_LoadedDalTypes.ContainsKey(ORM_TypeName))
_DAL_Type = _LoadedDalTypes[ORM_TypeName] as Type;
else
{
//
//哈希表不存在,表示第一次加载,需要从CSFrameworkV4_5.Server.DataAccess程序集中查询该类
//
//获取DataAccess程序集中所有Public类
Type[] types = DALTypeLoader.DALAssembly.GetExportedTypes(); //枚举程序集中所有Public类
foreach (Type T in types)
{
//只查找dalBaseDataDict的子类
if (false == T.IsSubclassOf(typeof(dalBaseDataDict))) continue; //查找DefaultORM_UpdateMode特性
object[] atts = T.GetCustomAttributes(typeof(DefaultORM_UpdateMode), false);
if ((atts == null) || (atts.Length == )) continue; //该类有定义DefaultORM_UpdateMode特性
DefaultORM_UpdateMode att = atts[] as DefaultORM_UpdateMode;
if (false == att.IsOverrideClass) continue; //仅查找具体类(子类) //比较ORM的全名是否相同
if (att.ORM.FullName.ToUpper() == ORM_TypeName.ToUpper())
{
_DAL_Type = T;
break;
}
} //第一次加载后添加到哈希表中, 基于性能优化.
if (_DAL_Type != null) _LoadedDalTypes.Add(ORM_TypeName, _DAL_Type);
}
#endregion return _DAL_Type;
} } }
加载的DAL数据访问层的类型的更多相关文章
- 1.1 DAL数据访问层
分布式(Distributed)数据访问层(Data Access Layer),简称DAL,是利用MySQL Proxy.Memcached.集群等技术优点而构建的一个架构系统.主要目的是解决高并发 ...
- iframe加载顺序导致数据访问出现问题
背景: 一个页面A内有一个iframe,src指向了B页面. 问题: 页面A通过Ajax获取服务器数据,并赋值给了页面A的全局变量gData,页面B要用到页面A的数据gData.那么问题来了当B访问g ...
- 数据访问层DAL(数据库访问抽象类DataProvider)
晒晒数据访问层DAL,看看你的项目数据访问层使用的是什么形式,数据访问性能比较 采用什么样的数据访问形式是软件编码很重要的一个环节,良好的数据访问形式不仅能够提搞代码的执行效率,协作能力,更重要的是对 ...
- ClownFish:比手写代码还快的通用数据访问层
http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...
- 【原创】打造基于Dapper的数据访问层
[原创]打造基于Dapper的数据访问层 前言 闲来无事,花几天功夫将之前项目里用到的一个数据访问层整理了出来.实现单个实体的增删改查,可执行存储过程,可输出返回参数,查询结果集可根据实际情况返回 ...
- 使用JDBC构建简单的数据访问层
本教程的目的是使用Java编写的分离的层去访问数据库中的表,这一层通常称为数据访问层(DAL) 使用DAL的最大好处是通过直接使用一些类似insert()和find()的方法简化了数据库的访问操作,而 ...
- 企业级应用架构(三)三层架构之数据访问层的改进以及测试DOM的发布
在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层能够支持一切数据访问技术,如Ado.n ...
- 数据访问层的改进以及测试DOM的发布
数据访问层的改进以及测试DOM的发布 在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层 ...
- 实用ExtJS教程100例-010:ExtJS Form异步加载和提交数据
ExtJS Form 为我们提供了两个方法:load 和 submit,分别用来加载和提交数据,这两个方法都是异步的. 系列ExtJS教程持续更新中,点击查看>>最新ExtJS教程目录 F ...
随机推荐
- Synchronized 详解
为了方便记忆,将锁做如下的分类 一.对象锁 包括方法锁(默认锁对象为this,当前实例对象)和同步代码块锁(自己指定锁对象) 1.代码块形式:手动指定锁定对象,也可是是this,也可以是自定义的锁 p ...
- ios overflow:scroll不顺畅解决办法
是要在其样式里面添加这段代码就行 -webkit-overflow-scrolling: touch;
- 1、引言(Introduction)
1.1 欢迎 在生活中用到的机器学习算法: (1)打开谷歌.必应搜索到你需要的内容,正是因为他们有良好的学习算法 (2)每次您阅读您的电子邮件垃圾邮件筛选器,可以帮你过滤大量的垃圾邮件 机器学习为什么 ...
- jquery 获取多选select的文本中并拼接成字符串
//拼接产品字符串 var productArray = new Array(); $.each($("#fmeatask-subSystem").find("optio ...
- IIS 添加二级应用程序
1.在原有的站点上添加虚拟目录 2.转换成应用程序
- 框架frameset
转自: http://www.cnblogs.com/sunfeiwto/archive////.html <FRAMESET> <FRAME> <NOFRAMES> ...
- 2018-8-10-win10-UWP-发邮件
title author date CreateTime categories win10 UWP 发邮件 lindexi 2018-08-10 19:17:19 +0800 2018-2-13 17 ...
- DTS
一.DTS的加载过程 如果要使用Device Tree,首先用户要了解自己的硬件配置和系统运行参数,并把这些信息组织成Device Tree source file.通过DTC(Device Tr ...
- Jade To Pug过程中的一个小问题
最近在使用jade+express+typescript搭建一个博客项目,在使用jade-bootstrap项目时出现了一个问题 在使用其中的carousel时,发现其中的变量并没有转义 +carou ...
- springboot中使用RabbitMq
转载:http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html RabbitMQ 即一个消息队列,主要是用来实现 ...