ASP.NET 系统支持数据库访问设计

简介:

系统设计时,往往要考虑到兼容多种数据库,拿常见的三种数据库:SqlServer,MySql,Oracle为例,常见的三层设计可以分为:业务逻辑层,数据访问层,实体层;他们的结构大致如下:


三种数据库对应有三套数据库访问类,为了方便组织代码,往往将读写一种数据库的类放到对应命名的文件夹下,代码结构大概如下:


业务逻辑层:

以上面的代码为例,业务逻辑层要调用数据访问层时,可以这样来实例化数据库访问对象:var db = DbFactory.GetService<IAdministrator>();

数据访问层:

关键点在于如何动态实例化数据库访问对象,即上面的DbFactory.GetService方法如何实现。

using System;
using System.Configuration;
using System.Reflection;

namespace Whir.Website.Admin.Repository
{
    public class DbFactory
    {
        public static T GetService<T>()
        {
            string dbType = ConfigurationManager.AppSettings.Get("DbType");
            Type interfaceType = typeof(T);
            Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
            foreach (Assembly assembly in assemblies)
            {
                string asmName = assembly.FullName.Contains(",")
                                     ? assembly.FullName.Substring(0,
                                                                   assembly.FullName.IndexOf(",",
                                                                                             StringComparison
                                                                                                 .Ordinal))
                                     : assembly.FullName;
                if (assembly.FullName.ToLower().StartsWith("whir"))
                {
                    //查找 接口所在程序集的类
                    if (interfaceType.Namespace != null
                        &&
                        (interfaceType.Namespace.Length >= asmName.Length && interfaceType.Namespace.Contains(asmName)))
                    {
                        Type[] classes = assembly.GetTypes();
                        foreach (Type type in classes)
                        {
                            //查找条件:
                            //1.实现了接口的类;
                            //2.类所在的命名空间含有配置文件配置的数据类型;
                            if (IsInherit(type, interfaceType)
                                && (type.Namespace != null && type.Namespace.ToLower().Contains(dbType.ToLower())))
                            {
                                var temp = (T)Activator.CreateInstance(type);
                                return temp;
                            }
                        }
                    }
                }
            }
            return default(T);
        }

        public static bool IsInherit(Type type, Type baseType)
        {
            if (type.BaseType == null) return false;
            if (type.BaseType == baseType || baseType.IsAssignableFrom(type))
                return true;
            return IsInherit(type.BaseType, baseType);
        }
    }
}
以上代码即可实现:根据配置文件设置的数据库类型,动态实例化对应的数据库访问对象。



完整代码下载

目录
打赏
0
0
0
0
4
分享
相关文章
会议室管理系统源码(含数据库脚本)
会议室管理系统源码(含数据库脚本)
65 0
jsp CRM客户管理系统(含数据库脚本以及文档)
jsp CRM客户管理系统(含数据库脚本以及文档)
81 10
基于ssm的社区物业管理系统,附源码+数据库+论文+任务书
社区物业管理系统采用B/S架构,基于Java语言开发,使用MySQL数据库。系统涵盖个人中心、用户管理、楼盘管理、收费管理、停车登记、报修与投诉管理等功能模块,方便管理员及用户操作。前端采用Vue、HTML、JavaScript等技术,后端使用SSM框架。系统支持远程安装调试,确保顺利运行。提供演示视频和详细文档截图,帮助用户快速上手。
172 17
基于ssm的超市会员(积分)管理系统,附源码+数据库+论文,包安装调试
本项目为简单内容浏览和信息处理系统,具备管理员和员工权限。管理员可管理会员、员工、商品及积分记录,员工则负责积分、商品信息和兑换管理。技术框架采用Java编程语言,B/S架构,前端使用Vue+JSP+JavaScript+Css+LayUI,后端为SSM框架,数据库为MySQL。运行环境为Windows,JDK8+Tomcat8.5,非前后端分离的Maven项目。提供演示视频和详细文档,购买后支持免费远程安装调试。
205 19
基于ssm的网络直播带货管理系统,附源码+数据库+论文
该项目为网络直播带货网站,包含管理员和用户两个角色。管理员可进行主页、个人中心、用户管理、商品分类与信息管理、系统及订单管理;用户可浏览主页、管理个人中心、收藏和订单。系统基于Java开发,采用B/S架构,前端使用Vue、JSP等技术,后端为SSM框架,数据库为MySQL。项目运行环境为Windows,支持JDK8、Tomcat8.5。提供演示视频和详细文档截图。
115 10
基于ssm的台球厅管理系统,附源码+数据库+论文
本项目为新锐台球厅管理系统,支持管理员和会员两种角色。管理员可进行会员管理、台球桌管理、订单管理等;会员可查看台球桌、预约、购买商品等。技术框架基于Java,采用B/S架构,前端使用Vue+HTML+JavaScript+CSS+LayUI,后端使用SSM框架,数据库为MySQL。运行环境为Windows,JDK8+MySQL5.7+Tomcat8.5。提供演示视频及详细文档截图。
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
125 0
消防行业如何借助时序数据库 TDengine 打造高效的数据监控与分析系统
本篇文章来自“2024,我想和 TDengine 谈谈”征文活动的优秀投稿,深入探讨了如何在消防行业中运用 TDengine 进行业务建模。文章重点介绍了如何通过 TDengine 的超级表、标签设计和高效查询功能,有效管理消防监控系统中的时序数据。作者详细阐述了实时监控、报警系统以及历史数据分析在消防行业中的应用,展示了 TDengine 在数据压缩、保留策略和分布式架构下的强大优势。
96 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等