ASP.NET MVC入门到精通——数据库仓储
业务层调用数据层对象,我不想每次都new一个数据层对象,而是在数据层创建一个仓储,统一管理所有的对象调用。
1、在IDAL项目中,新建IDBSession.tt模板
Ctrl+S后自动生成IDBSession接口
2、在DAL项目中实现IDBSession接口
新建DBSession.tt模板
Ctrl+S后自动生成DBSession类
接下来,我们创建DBSession工厂和上下文工厂,目的是为了提高效率,在线程中共用一个对象。
3、IDAL项目中添加IDBSessionFactory接口

namespace IDAL
{
/// <summary>
/// 数据仓储工厂
/// </summary>
public interface IDBSessionFactory
{
IDBSession GetDBSession();
}
}

DAL项目中添加DBSessionFactory类继承IDBSessionFactory接口

using System.Runtime.Remoting.Messaging;
using IDAL; namespace DAL
{
public class DBSessionFactory : IDBSessionFactory
{
/// <summary>
/// 此方法的作用: 提高效率,在线程中 共用一个 DBSession 对象!
/// </summary>
/// <returns></returns>
public IDBSession GetDBSession()
{
//从当前线程中 获取 DBContext 数据仓储 对象
IDBSession dbSesion = CallContext.GetData(typeof(DBSessionFactory).Name) as DBSession;
if (dbSesion == null)
{
dbSesion = new DBSession();
CallContext.SetData(typeof(DBSessionFactory).Name, dbSesion);
}
return dbSesion;
}
}
}

4、同样,我们再来创建一个上下文工厂,即便以后有多个数据库上下文,也能够很好的支持。
IDAL项目中,新建IDBContextFactory.cs接口

using System.Data.Entity; namespace IDAL
{
/// <summary>
/// EF数据上下文 工厂
/// </summary>
public interface IDBContextFactory
{
/// <summary>
/// 获取 EF 上下文对象
/// </summary>
/// <returns></returns>
DbContext GetDbContext();
}

DAL项目中新建DBContextFactory类继承IDBContextFactory接口

using System.Data.Entity;
using System.Runtime.Remoting.Messaging;
using Model; namespace DAL
{
public class DBContextFactory : IDBContextFactory
{
#region 创建 EF上下文 对象,在线程中共享 一个 上下文对象 + DbContext GetDbContext()
/// <summary>
/// 创建 EF上下文 对象,在线程中共享 一个 上下文对象
/// </summary>
/// <returns></returns>
public DbContext GetDbContext()
{
////从当前线程中 获取 EF上下文对象
var dbContext = CallContext.GetData(typeof(DBContextFactory).Name) as DbContext;
if (dbContext == null)
{
dbContext = new OAEntities();
CallContext.SetData(typeof(DBContextFactory).Name, dbContext);
}
return dbContext;
}
#endregion
}
}

5、Common项目中,添加ConfigurationHelper.cs来操作配置文件

using System;
using System.Configuration; namespace Common
{
public static class ConfigurationHelper
{
public static string AppSetting(string key)
{
return ConfigurationManager.AppSettings[key];
}
}
}

Web.config中添加如下配置节点:
<add key="DBSessionFatory" value="DAL.DBSessionFactory" />
<add key="DBSessionFatoryDLL" value="E:\WorkSpace\Study\Webs\MVC\OAsln\Web\bin\DAL.dll" />
6、修改BaseBLL类的调用方式,添加如下代码:

/// <summary>
/// 2.0 数据仓储接口(相当于数据层工厂,可以创建所有的数据子类对象)
/// </summary>
private IDAL.IDBSession iDbSession; #region 数据仓储 属性 + IDBSession DBSession
/// <summary>
/// 数据仓储 属性
/// </summary>
public IDAL.IDBSession DBSession
{
get
{
if (iDbSession == null)
{
//1.读取配置文件
string strFactoryDLL = Common.ConfigurationHelper.AppSetting("DBSessionFatoryDLL");
string strFactoryType = Common.ConfigurationHelper.AppSetting("DBSessionFatory");
//2.1通过反射创建 DBSessionFactory 工厂对象
Assembly dalDLL = Assembly.LoadFrom(strFactoryDLL);
Type typeDBSessionFatory = dalDLL.GetType(strFactoryType);
IDAL.IDBSessionFactory sessionFactory = Activator.CreateInstance(typeDBSessionFatory) as IDAL.IDBSessionFactory;
//2.2根据配置文件内容 使用 DI层里的Spring.Net 创建 DBSessionFactory 工厂对象 //3.通过 工厂 创建 DBSession对象
iDbSession = sessionFactory.GetDBSession();
}
return iDbSession;
}
}
#endregion

在这里,使用到了工厂来创建对象,后面引入了Spring.net之后,会回过头来优化现有的代码。项目中使用到了许多接口,目的是为了解耦,每一个项目的职责尽量让其单一,业务层只让其调用数据层接口,也是为了依赖于抽象,而不是具体。每一个框架其实都是各种设计模式的一个集合,设计模式是为了解决一类问题,而框架就是为了解决一系列问题了。到现在为止,整个项目的雏形已经出来了,但是后续,我们一步一步来优化,好的框架不是一下子就能设计得完美的,而是能够不断的拥抱修改,可持续扩展,不断改进出来的。
ASP.NET MVC入门到精通——数据库仓储的更多相关文章
- 24、ASP.NET MVC入门到精通——数据库仓储
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 业务层调用数据层对象,我不想每次都new一个数据层对象,而是在数据层创建一个仓储,统一管理所有的对象调用. 1.在IDAL项目中,新建IDB ...
- 25、ASP.NET MVC入门到精通——Spring.net-业务层仓储
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架. 1.假设我们来做一个 ...
- 26、ASP.NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱 ...
- 22、ASP.NET MVC入门到精通——搭建项目框架
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 前面的章节,说了ASP.NET MVC项目中常用的一些技术和知识点,更多的是理论上面的东西,接下来,我将通过一个简单的OA项目来应用我们之前 ...
- 5、ASP.NET MVC入门到精通——NHibernate代码映射
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...
- 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...
- 7、ASP.NET MVC入门到精通——第一个ASP.NET MVC程序
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...
- 20、ASP.NET MVC入门到精通——WebAPI
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 微软有了Webservice和WCF,为什么还要有WebAPI? 用过WCF的人应该都清楚,面对那一大堆复杂的配置文件,有时候一出问题,真的 ...
- 1、ASP.NET MVC入门到精通——新语法
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...
随机推荐
- Android学习之SharedPreferences
SharedPreferences使用键值对的方式来存储数据,并支持多种不同类型的数据存储. 1.界面布局 <TableLayout xmlns:android="http://sch ...
- moodle中的完形填空题的文本编写方法
moodle中的完形填空题的文本编写方法 [完形填空题]考题把一段文字挖去一些空,让考生根据上下文正确地完成这些填空.完型填空题中的一段短文可以包括各种题目,如选择,填空,和数字题等. 题目的编辑是在 ...
- 第三百二十二节,web爬虫,requests请求
第三百二十二节,web爬虫,requests请求 requests请求,就是用yhthon的requests模块模拟浏览器请求,返回html源码 模拟浏览器请求有两种,一种是不需要用户登录或者验证的请 ...
- miRbase 数据库简介
miRbase 是miRNA 的数据库,目前最新版本为 release 21, 共有28645 条 miRNA, 第22 版已经完成,即将发布,22版新增了10000 个miRNA, 大多来源于新的 ...
- iPhone 配置使用工具
“iPhone 配置实用工具”可让您轻松地创建.维护和安装配置描述文件及对配置描述文件进行加密,跟踪和安装预置描述文件与授权的应用程序,以及采集包括控制台日志在内的设备信息. http://suppo ...
- RGB转LAB色彩空间
1.原理 RGB无法直接转换成LAB,需要先转换成XYZ再转换成LAB,即:RGB——XYZ——LAB 因此转换公式分两部分: (1)RGB转XYZ 假设r,g,b为像素三个通道,取值范围均为[0,2 ...
- 协助CIO成功实施ITIL
如今,企业在日渐复杂的IT基础架构和应用服务上所做出的投资越来越庞大.有数据显示,财富500强在IT上的平均开支已达到了3亿5千万美元. 为了清楚地认识IT投资所能带来的价值,企业应考虑改善服务管理流 ...
- mySql慢查询分析原因
1.分析查询慢的语句,并记录到日志中 查看: http://blog.csdn.net/haiqiao_2010/article/details/25138099
- symfony获取POST数据
$request = $this->getRequest(); $messageid = $this->strip_tags($request->get('messageid')); ...
- linux环境中通过useradd命令,创建用户的时候指定用户的base-dir
需求说明: 今天一个同事,问了一个这样的问题,在linux环境中,创建用户的时候,默认的是在/home目录下创建一个与用户名相同的家目录, 如何能够将这个/home更换成一个其他的,比如/opt/ap ...