加载的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 ...
随机推荐
- linux下shell显示git当前分支
function git-branch-name { git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3 } functio ...
- [Linux] 001 预备知识
Unix 1965年 MIT,通用电气(GE),AT&T 的贝尔实验室联合开发 项目名称:Multics 目标:开发一种交互式的,具有多道程序处理能力的分时操作系统 后来:贝尔实验室宣布退出 ...
- Ngnix VS Apache
Ngnix和Apache各有优缺点, Ngnix在并发性能上比Apache好太多了 原因是,Ngnix是采用的epoll网络I/O模型, 而Apache采用的是select网络I/O模型 具体参见: ...
- "源文件名长度大于文件系统支持的长度无法删除"的解决方案
import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; /** * @auth ...
- JS跨域:jsonp、跨域资源共享、iframe+window.name
JS跨域:jsonp.跨域资源共享.iframe+window.name :https://www.cnblogs.com/doudoublog/p/8652213.html JS中的跨域 请求跨域有 ...
- POI之Excel文档增删改查
需要引用apache第三方lib库poi 支持xls.xlsx格式excel读写操作 package com.hua.excel; import java.io.File;import java.io ...
- 暂时放弃ts版个人博客转js版博客
我本打算信心满满的做个vue+ts做个博客的,其实架构搭的差不多了,但是我在用vuex的时候发现一个自己无法忍受的瑕疵,那就是在用vuex的时候,得利于普通版vuex的map语法糖实在太好用,这把我惯 ...
- setter getter 方法
MRC下setter.getter方法写法.重写dealloc方法 @interface People : NSObject @property (nonatomic,strong) NSString ...
- 2018-2-13-C#-Find-vs-FirstOrDefault
title author date CreateTime categories C# Find vs FirstOrDefault lindexi 2018-2-13 17:23:3 +0800 20 ...
- Linux就该这么学06学习笔记
参考链接:https://www.linuxprobe.com/chapter-06.html 1.一切从“/”开始 Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准( ...