加载的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 ...
随机推荐
- Struts2之处理结果集
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...
- #3831 TJOI2013单词
WOJ#3831 TJOI2013单词 题面 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. 输入 第一个一个整数 N ,表示有 ...
- pandas分组聚合案例
美国2012年总统候选人政治献金数据分析 导入包 import numpy as np import pandas as pd from pandas import Series,DataFrame ...
- Helm教程
1.概述 Helm是k8s的包管理工具,类似Linux系统常用的 apt.yum等包管理工具. 使用helm可以简化k8s应用部署 2.基本概念 Chart:一个 Helm 包,其中包含了运行一个应用 ...
- Android禁止输入表情符号
在我们Android开发的项目中,难免有要求在输入框中禁止输入表情,所以呢,写了一个输入框禁止输入表情的demo,供大伙参考 效果图 如图显示,如果用户输入了表情字符,会提示. EmojiFilter ...
- HTML5:新元素来实现一下网页布局
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- hibernate Criteria(条件查询接口)
Criteria(条件查询接口) // 1.简单查询 List<Customer> list = session.createCriteria(Customer.class).list() ...
- Flutter-icon
常用屬性 Icon( Icons.access_alarm,//设置使用哪种图标 size: 300,//设置图标大小 color: Colors.yellow,//设置图标颜色 textDirect ...
- 15_1.InetAddress
import java.net.InetAddress; import java.net.UnknownHostException; public class InetAdressTest { pub ...
- 10.VScode Debug——2019年12月12日
title: vscode debug date: "2019-09-17 16:17:16" tags: 技巧 categories: 技术驿站 1.为什么需要调试 写了很多行代 ...