搭建三层架构(ASP.NET MVC+EF)
昨天面试的时候最后做了一道上机题,竟然跪了,跪就跪在没有搭好框架,连接数据库总是程序报错。
回来之后亲自搭了一下框架,弄好后放到博客上。下图就是搭建好后,整个框架的结构就是这样,下面对框架中的文件进行讲解。

搭建步骤:
1.数据库建好后,由数据库生成实体模型。
2.添加BLL、DAL层两个类库。
3.在DAL层先建工厂EFContextFactory.cs,下面是创建上下文对象的方法。
namespace DAL
{
class EFContextFactory
{
#region 从线程的数据槽中获得上下文对象
/// <summary>
/// 从线程的数据槽中获得上下文对象
/// </summary>
/// <returns></returns>
public static DbContext GetDbContextFromContext()
{
DbContext context = CallContext.GetData("Dbcontext") as mssjEntities;
if (context == null)
{
context = new mssjEntities();
CallContext.SetData("Dbcontext", context);
}
return context;
}
#endregion
}
}
4.之后是创建BaseDAL.cs,BaseDAL中先获取EF上下文实体,然后再通过实体写公用的方法。
namespace DAL
{
public class BaseDAL<T> where T:class,new()
{
//下面是两种写法获取EF上下文对象,
private DbContext db = EFContextFactory.GetDbContextFromContext();
protected DbContext DataContext
{
get { return EFContextFactory.GetDbContextFromContext(); }
} /// <summary>
/// 根据查询条件获取单个实体
/// </summary>
/// <param name="condition"></param>
/// <returns></returns>
public T GetModel(Expression<Func<T, bool>> condition)
{
return DataContext.Set<T>().Where(condition).FirstOrDefault();
}
}
}
5.建立文件UserDAL.cs,这个是数据表映射实体所对应的DAL文件。
namespace DAL
{
/// <summary>
/// UserDAL继承BaseDAL
/// </summary>
public class UserDAL:BaseDAL<User>
{
/// <summary>
/// 在这里声明实例化一个UserDAL的对象
/// </summary>
public static readonly UserDAL GetUserDAL = new UserDAL();
private UserDAL() { }
}
}
6.接下来在BLL层先建一个BaseBLL。
namespace BLL
{
public abstract class BaseBLL<T> where T:class,new()
{
/// <summary>
/// 构造方法中,创建仓储。
/// </summary>
public BaseBLL()
{
SetCurrentRepository();
}
/// <summary>
/// CurrentRepository属性在BaseBLL的子类中用到
/// </summary>
protected BaseDAL<T> CurrentRepository
{
get;
set;
}
//设置成抽象方法,子类继承时,应该重写抽象方法。
public abstract void SetCurrentRepository(); /// <summary>
/// 根据查询条件获取单个实体
/// </summary>
/// <param name="condition"></param>
/// <returns></returns>
public T GetModel(Expression<Func<T, bool>> condition)
{
return CurrentRepository.GetModel(condition);
} }
}
7.创建UserBLL.cs继承BaseBLL.cs。
namespace BLL
{
public class UserBLL:BaseBLL<User>
{
/// <summary>
/// 在这里声明实例化一个UserBLL的对象
/// </summary>
public static readonly UserBLL GetUserBLL = new UserBLL();
/// <summary>
/// 要对BaseBLL中的抽象方法进行实现。
/// </summary>
public override void SetCurrentRepository()
{
CurrentRepository = UserDAL.GetUserDAL;//CurrentRepository属性在BaseBLL中定义
}
}
}
8.至此,BLL、DAL层搭建完毕,接下来把数据库的链接字符串复制到Web.config中,之后启动网站。打断点进行监视,便发现数据库已经链接成功,这样一个简单的框架就算搭好了。

注意:1.Web层,DAL层需要引用EntityFramework的dll。因为EntityFramework有版本问题,所以都去引用Model层中bin文件夹下的dll。
2.Model层是另外三个层必须引用的。
搭建三层架构(ASP.NET MVC+EF)的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这 ...
- 转载——Asp.Net MVC+EF+三层架构的完整搭建过程
转载http://www.cnblogs.com/zzqvq/p/5816091.html Asp.Net MVC+EF+三层架构的完整搭建过程 架构图: 使用的数据库: 一张公司的员工信息表,测试数 ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2 ...
- 使用EF Code First搭建一个简易ASP.NET MVC网站,允许数据库迁移
本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移. 创建一个ASP.NET MVC 4 网站. 在Models文件夹内创建Person类. public ...
- 关于ASP.NET或VS2005 搭建三层架构的理解
最近想学习ASP.NET建网站,关于ASP.NET或VS2005 搭建三层架构的理解,网上摘录了一些资料,对于第(2)点的讲解让我理解印象深刻,如下: (1)为何使用N层架构? 因为每一层都可以在仅仅 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 (2):数据 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列
http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...
随机推荐
- windows下python3.4安装scikit-learn
python3.4.0_64位下安装numpy-1.11.1 安装步骤: 1.在终端CMD中输入: python -m pip install -U pip 2.找到 下载的 numpy-1.1 ...
- 整理: Android HAL
这篇文章整理来自http://bbs.chinaunix.net/thread-3675980-1-1.html 在论坛中看到的Android HAL讨论,有个ID描述的比较清楚,摘录如下: temp ...
- (DP)3.Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, ...
- AX2012 referencegroup
用referencegroup 1.添加EDT,refrecid 2.修改autoidentification 3. 可以直接拖refrecid字段出来,就是referencegroup了
- android WebView问题
1.加载本地js.css文件 今天碰到个问题,使用WebView加载html数据,本来没什么问题,loadUrl(),loadData(),都可以使用 但是如果需要引入本地的js.css文件就碰到问题 ...
- win10 Administrator没有管理员权限解决方案
方法/步骤 在运行框 里面输入“gpedit.msc”. 打开组策略编辑器,计算机配置->windows设置->安全设置->->本地策略->安全选项 找到“用户账户控制: ...
- dedecms代码研究七
简单回顾一下,前面我们首页动态文件index.PHP调用arc.partview.class.php来初始化首页模板 arc.partview.class.php通过SetTemplet调用DedeT ...
- 前端开发框架Bootstrap和KnockoutJS
江湖中那场异常惨烈的厮杀,如今都快被人遗忘了.当年,所有的武林同道为了同一个敌人都拼尽了全力,为数不多的幸存者心灰意冷,隐姓埋名,远赴他乡,他们将唯一的希望寄托给时间.少年子弟江湖老,红颜少女的鬓边也 ...
- 15款增强web体验的Javascript库
1. Pikaday: Standalone JavaScript Datepicker 这是一个令人耳目一新的JavaScript日期选择器 轻量轻(压缩和gzip后小于5KB) 没有依赖其它JS框 ...
- Android开发--环境的配置
一 Android开发环境:JDK.eclipse ADT.海马模拟器或者夜神模拟器.配置之前先保证运行内存足够大,不然会导致运行卡. 二 JDK(不用安装) 1.jdk官方下载地址:http://w ...