昨天面试的时候最后做了一道上机题,竟然跪了,跪就跪在没有搭好框架,连接数据库总是程序报错。

回来之后亲自搭了一下框架,弄好后放到博客上。下图就是搭建好后,整个框架的结构就是这样,下面对框架中的文件进行讲解。

搭建步骤:

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)的更多相关文章

  1. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这 ...

  2. 转载——Asp.Net MVC+EF+三层架构的完整搭建过程

    转载http://www.cnblogs.com/zzqvq/p/5816091.html Asp.Net MVC+EF+三层架构的完整搭建过程 架构图: 使用的数据库: 一张公司的员工信息表,测试数 ...

  3. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2 ...

  6. 使用EF Code First搭建一个简易ASP.NET MVC网站,允许数据库迁移

    本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移. 创建一个ASP.NET MVC 4 网站. 在Models文件夹内创建Person类. public ...

  7. 关于ASP.NET或VS2005 搭建三层架构的理解

    最近想学习ASP.NET建网站,关于ASP.NET或VS2005 搭建三层架构的理解,网上摘录了一些资料,对于第(2)点的讲解让我理解印象深刻,如下: (1)为何使用N层架构? 因为每一层都可以在仅仅 ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)  (1)框架搭建    (2):数据 ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  10. ASP.NET MVC+EF框架+EasyUI实现权限管理系列

    http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...

随机推荐

  1. 【转】抛弃EF,20分构建一个属于自己的ORM框架

    链接:http://www.cnblogs.com/irenebbkiss/p/4157364.html

  2. MyEclipse中的重命名

    我们要重命名一个函数或变量时,如果手工改会很耗时而且可能会有些遗漏,造成编译错误.这个时候可以在变量或函数定义处,按下MyEclipse的Alter + SHIF + R 重命名,然后按下Enter键 ...

  3. [DFNews] 入侵汽车控制刹车和油门?——速度与激情6 的节奏?

    原文跳转: http://arstechnica.com/security/2013/07/disabling-a-cars-brakes-and-speed-by-hacking-its-compu ...

  4. 【WCF】无废话WCF入门教程

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  5. inline-block和block的区别

    <html> <head> <style> body,ul,li,span{padding:0px;margin:0px;} </style> < ...

  6. tracer

    http://people.canonical.com/~acelan/coscup-2010/Debugging%20Linux%20Kernel%20by%20Ftrace.pdf http:// ...

  7. [转]遍历windows服务

    原文:http://www.codeproject.com/Articles/1573/About-Windows-Services #include <windows.h> #inclu ...

  8. ORACLE 常用函数 日期/时间函数

    ---------------------------------------------日期/时间函数----------------------------------------------- ...

  9. vi 使用

      1)命令 gf  ,可以从光标指定的文件位置打开对应文件 :bd回来 2)http://www.cnblogs.com/wangkangluo1/archive/2012/04/12/244495 ...

  10. docker中安装ssh服务

    系统:Debian Docker 目标:在docker(debian系统)中安装ssh服务,实现远程登陆和控制docker 步骤: 初始状态:通过docker pull debian得到的一个debi ...