网站整体架构建议采用工厂模式

分别包括:数据访问层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数据库的数据访问设计的更多相关文章

  1. 功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上

    软件名:DataPie 功能:支持SQL server.SQLite.ACCESS数据库的导入.导出.存储过程调用,支持EXCEL2007.EXCEL2003.ACCESS2007. CSV文件导入数 ...

  2. 使用的 SQL Server 版本不支持数据类型“datetime2”.

    错误原因,在使用ado.net entity的时候,entity使用的数据库是sqlserver 2008, 但后来实际使用中使用的数据库是sqlserver 2005, 使用的 SQL Server ...

  3. SQL Server 2016原生支持JSON

    转载原地址: http://www.cnblogs.com/lyhabc/p/4747694.html SQL Server 2005 开始支持 XML 数据类型,提供原生的 XML数据类型.XML ...

  4. sql server 备份与恢复系列八 系统数据库备份与恢复分析

    一.概述 在前面讲过"sql server 备份与恢复系列"都是集中在用户数据库上.sql server还维护着一组系统数据库,这些系统数据库对于服务器实例的运行至关重要.在每次进 ...

  5. ef SQL Server 版本不支持数据类型“datetime2”

    我遇到这个问题是在用数据库模型的时候.当时我电脑上是sql2008 通过vs2010建立了一个ADO.net数据库模型,之后在项目上线的时候,临时把数据库换成了sql2005,在添加新闻的时候出现了“ ...

  6. 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析

    对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...

  7. Linux + .net core 开发升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法

    前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...

  8. Linux 运行升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法

    前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...

  9. SQL Server 2008 错误15023:当前数据库中已存在用户或角色

    解决SQL Server 2008 错误15023:当前数据库中已存在用户或角色,SQLServer2008,错误15023,在使用SQL Server 2008时,我们经常会遇到一个情况:需要把一台 ...

  10. SQL Server 2008 R2如何开启数据库的远程连接

    SQL Server 2008 R2如何开启数据库的远程连接 SQL Server 2005以上版本默认是不允许远程连接的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,远 ...

随机推荐

  1. 最大似然估计(MLE)与最小二乘估计(LSE)的区别

    最大似然估计与最小二乘估计的区别 标签(空格分隔): 概率论与数理统计 最小二乘估计 对于最小二乘估计来说,最合理的参数估计量应该使得模型能最好地拟合样本数据,也就是估计值与观测值之差的平方和最小. ...

  2. 嵌套结构使用:struc1-struc2-XXX

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. [SAP ABAP开发技术总结]预定义(内置)数据类型

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. 【面向打野编程】——KMP算法入门

    一.问题 咱们先不管什么KMP,来看看怎么匹配两个字符串. 问题:给定两个字符串,求第二个字符串是否包含于第一个字符串中. 为了具体化,我们以 ABCAXABCABCABX 与 ABCABCABX为例 ...

  5. 【网络流24题----03】Air Raid最小路径覆盖

    Air Raid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  6. MySQL数据表生成ER图

    遇到没有说明文档的数据库的时候,一张一张表去分析,需要花费很长时间和精力. 幸好有一些工具,可以帮助我们生成ER图,这样看起来就一目了然: 下面我将自己的一次实践记录于下,供参考: 1.下载并安装工具 ...

  7. jpg 批量压缩工具 v1.0

    工作需要经常压缩大量图片,网上搜了一些  使用起来总觉得不方便.昨天自己用AIR 写了一个,功能简单,需要的朋友可以自己 下载使用win 版绿色版  http://pan.baidu.com/s/1k ...

  8. 输出sed的重定向

    默认情况下,sed编辑器会将进步的结果输出到STDOUT上,你可以在shll脚本中使用所有重订向sed编辑器输出的标准方法. 你可以在脚本中用反引号来将sed编辑器命令的输出重定向到一个变量中供后面使 ...

  9. iOS - OC Category 分类

    1.Category 1)分类/类别(category): 允许以模块的方式向现有类定义添加新的方法(默认不能添加实例变量).用以扩展自己或他人以前实现的类,使它适合自己的需要. 分类的名称括在类名之 ...

  10. iOS - NetRequest 网络数据请求

    1.网络请求 1.1 网络通讯三要素 1.IP 地址(主机名): 网络中设备的唯一标示.不易记忆,可以用主机名(域名). 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2 ...