支持SQL Server数据库又支持MongoDB数据库的数据访问设计
网站整体架构建议采用工厂模式
分别包括:数据访问层DAL,数据访问接口层IDAL,工厂层DALFactory,业务逻辑层,显示层这样的架构方式
在WebConfig配置采用何种数据库的数据访问层
- <appSettings>
- <add key="DAL" value="SQLServerDAL"/><!--数据访问层-->
- </appSettings>
定义接口层
- public interface ILocal_TopicDAL
- {
- /// <summary>
- /// 根据问题ID获取问题详细
- /// </summary>
- /// <param name="LT_ID">问题ID</param>
- /// <returns></returns>
- Local_TopicModel getTopicById(int LT_ID, string sCityCode, string sLanguage);
- }
数据访问层继承接口层
- public class Local_TopicDAL : ILocal_TopicDAL
- {
- #region 根据问题ID获取问题详细
- /// <summary>
- /// 根据问题ID获取问题详细
- /// </summary>
- /// <param name="LT_ID">问题ID</param>
- /// <param name="sCityCode">城市代码</param>
- /// <param name="sLanguage">语言</param>
- /// <returns></returns>
- public Local_TopicModel getTopicById(int LT_ID, string sCityCode, string sLanguage)
- {
- string sql = "select LT_ID,LT_Title,LT_ThanksInfo,LT_Content,LT_ViewCount,LT_CommentCount,LTC_ID,LT_UpdateDate,LT_LastReplyDate,"+
- "LT_Checked,isnull(LT_Status,0) as LT_Status,isnull(LM_ID,0) as LM_ID,LM_NickName,LT_IsEffectiveDate,LT_EffectiveDate,LT_CreateDate," +
- "LTT_ID"+
- ",LTK_IDs,LT_AboutIds"+
- " from Local_Topic"+
- " where LT_Checked=1 and LT_ID=@LT_ID";
- string ConnectionString = ConnectionManage.getConnectionString(sCityCode, sLanguage);//EdushiDataCenter.Current.CityConfigProvider.GetCitySetting(sCityCode, sLanguage).ECS_DBConnectString;
- SqlParameter[] parameters = { new SqlParameter("@LT_ID", SqlDbType.Int, ) };
- parameters[].Value = LT_ID;
- DataTable dt = DbHelperSQL.Query(sql, ConnectionString, parameters).Tables[];
- if (dt.Rows.Count > )
- {
- return DatableToList.CreateItem<Local_TopicModel>(dt.Rows[]);
- }
- else
- {
- return new Local_TopicModel();
- }
- }
- #endregion
工厂层根据DAL路径通过反射创建数据访问实例
- private static readonly string AssemblyPath = ConfigurationManager.AppSettings["DAL"];//数据访问层的程序集
- #region 创建对象(不使用缓存)
- /// <summary>
- /// 创建对象(不使用缓存)
- /// </summary>
- /// <param name="AssemblyPath"></param>
- /// <param name="ClassNamespace"></param>
- /// <returns></returns>
- private object CreateObjectNoCache(string AssemblyPath, string ClassNamespace)
- {
- try
- {
- object objType = Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace);
- return objType;
- }
- catch(Exception ex)
- {
- LogOperate.WriteErrorLog("创建反射异常(不使用缓存)", ex);
- return null;
- }
- }
业务逻辑层通过调用反射的数据访问实例来执行具体方法
- #region 根据问题ID获取问题详细
- /// <summary>
- /// 根据问题ID获取问题详细
- /// </summary>
- /// <param name="LT_ID">问题ID</param>
- /// <returns></returns>
- public Local_TopicModel getTopicById(int LT_ID)
- {
- CacheConfigModel ccm = new CacheConfigHelper().getCacheConfigModelByCacheId(, ConfigurationManager.AppSettings["sectionName"].ToString());
- string key = string.Format(ccm.CacheKey, _cityCode, LT_ID);
- object obj = cache.Get(key);
- if (obj == null)
- {
- object objType = new DataAccess().CreateObject("Local_TopicDAL");//创建Local_Topic的实例
- obj = objType == null ? new Local_TopicModel() : ((ILocal_TopicDAL)objType).getTopicById(LT_ID, _cityCode, _language);
- cache.Add(key, obj, DateTimeOffset.Now.AddSeconds(ccm.CacheTime));
- }
- return obj as Local_TopicModel;
- }
- #endregion
支持SQL Server数据库又支持MongoDB数据库的数据访问设计的更多相关文章
- 功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上
软件名:DataPie 功能:支持SQL server.SQLite.ACCESS数据库的导入.导出.存储过程调用,支持EXCEL2007.EXCEL2003.ACCESS2007. CSV文件导入数 ...
- 使用的 SQL Server 版本不支持数据类型“datetime2”.
错误原因,在使用ado.net entity的时候,entity使用的数据库是sqlserver 2008, 但后来实际使用中使用的数据库是sqlserver 2005, 使用的 SQL Server ...
- SQL Server 2016原生支持JSON
转载原地址: http://www.cnblogs.com/lyhabc/p/4747694.html SQL Server 2005 开始支持 XML 数据类型,提供原生的 XML数据类型.XML ...
- sql server 备份与恢复系列八 系统数据库备份与恢复分析
一.概述 在前面讲过"sql server 备份与恢复系列"都是集中在用户数据库上.sql server还维护着一组系统数据库,这些系统数据库对于服务器实例的运行至关重要.在每次进 ...
- ef SQL Server 版本不支持数据类型“datetime2”
我遇到这个问题是在用数据库模型的时候.当时我电脑上是sql2008 通过vs2010建立了一个ADO.net数据库模型,之后在项目上线的时候,临时把数据库换成了sql2005,在添加新闻的时候出现了“ ...
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
- Linux + .net core 开发升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...
- Linux 运行升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...
- SQL Server 2008 错误15023:当前数据库中已存在用户或角色
解决SQL Server 2008 错误15023:当前数据库中已存在用户或角色,SQLServer2008,错误15023,在使用SQL Server 2008时,我们经常会遇到一个情况:需要把一台 ...
- SQL Server 2008 R2如何开启数据库的远程连接
SQL Server 2008 R2如何开启数据库的远程连接 SQL Server 2005以上版本默认是不允许远程连接的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,远 ...
随机推荐
- JAVA排序--[冒泡排序]
package com.array; public class Sort_MaoPao { /** * 项目名称:冒泡排序 * 项目要求:用JAVA对数组进行排序,并运用冒泡排序算法 * 作者:Sev ...
- [SAP ABAP开发技术总结]数据引用(data references)、对象引用(object references)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 函数(def)
一.为什么要使用函数: 面向过程的编程在代码里有很多代码是可以重复利用的,如果使用面向过程编程会使代码显得纷繁复杂,不利于他人和自己日后的阅读.而在函数式编程里,则可以把每个可重复利用的功能封装在一个 ...
- .NET在后置代码中输入JS提示语句(背景不会变白)
来源:http://niunan.iteye.com/blog/248256 Page.ClientScript.RegisterStartupScript(Page.GetType(), " ...
- SQL 语句转换格式函数Cast、Convert
CAST和CONVERT都经常被使用.特别提取出来作为一篇文章,方便查找. CAST.CONVERT都可以执行数据类型转换.在大部分情况下,两者执行同样的功能,不同的是CONVERT还提供一些特别的日 ...
- javascript学习-原生javascript的小特效(多物体运动效果)
前些日子看了个视频所以就模仿它的技术来为大家做出几个简单的JS小特效 今天为大家做的是多个物体的运动效果, 1:HTML <body> <ul> <li> ...
- new,delete和malloc,free以及allocator<T>
一)new和delete,自己觉得一句话就是:最好同一作用域内,必须成对使用 先给出自己的认识: malloc,free,申请和释放一段heap堆中的内存. new:申请heap内存并在申请的内存中放 ...
- Oracle 中取当前日期的上个月最后天和第一天
前一月 最后一天select last_day(add_months(sysdate,-1)) from dual; 2010-2-28 9:23:01; select t ...
- JS trim()方法使用
JS trim()方法使用上有浏览器限制: 1.直接使用 string.trim() 浏览器版本限制:JavaScript Version 1.8 2.间接使用<即自己使用正则构造类trim的 ...
- web设计经验<八>20个设计新手常犯的排版设计误区
很多同学问设哥,为什么别人字体就那么随意放一下就辣么好看,其实排版可有大学问,不是随意放就好看.这就如同配色一样,也有千变万化的学问.相信大家看完Designschool这篇头条热文,一定倍有收获. ...