搭建三层架构(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实现权限管理系列之开 ...
随机推荐
- Linxu 安装Scala
在安装Scala的时候遇到以下错: Exception in thread "main" java.lang.NoClassDefFoundError: scala.tools.n ...
- 在windows上安装scikit-learn开发环境
操作系统:Windows 10 64位 1.安装python 前往https://www.python.org/downloads/下载对应操作系统的版本,笔者下载了32位的python 2.7.13 ...
- mybatis处理一对一查询
有班级表,老师表,要求给定班级id查出班级信息和班级对应的老师信息 1.使用嵌套结果方式 sql语句: <select id="findClasses" parameterT ...
- [HTML] CSS Id 和 Class选择器
id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器. id 选择器 id 选择器可以为标 ...
- 47. Largest Rectangle in Histogram && Maximal Rectangle
Largest Rectangle in Histogram Given n non-negative integers representing the histogram's bar height ...
- strong & weak
Here is a quick summary: A strong reference will keep the object it points to from being deallocated ...
- (Forward) Music Player: From UI Proposal to Code
Some developers have difficult to code when the UI proposal is a bit “sophisticated” or “complex”. M ...
- java web _BBS
在注册时用户输入用户名和密码不合格在旁边提示 在用户发言带有屏蔽字时应在旁边提示,但不影响其发送,只是在显示时屏蔽关键字
- Python TCP服务器
TCP服务器的创建也比较简单: 1.建立一个socket对象 2.绑定要监听的IP地址和端口 3.当有客户端请求时,启动多线程处理客户端连接 import socket import threadin ...
- QTP全选页面的复选框
Set glht= Browser("管理后台").Page("管理后台") Set Mydescription = description.Create()M ...