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

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

搭建步骤:

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. 源码阅读笔记 - 1 MSVC2015中的std::sort

    大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格 ...

  2. [ActionScript 3.0] AS3.0 烟雾粒子效果

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; ...

  3. EXT 省市三级联动及默认选择

    var provinceStore = Ext.create('Ext.data.Store', { fields: ['id', 'name'], proxy: { type: 'ajax', ur ...

  4. XE6移动开发环境搭建之IOS篇(9):配置XE6的IOS SDK(有图有真相)

    网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 1.开启PAServ ...

  5. 构造方法Constructor

    构造函数的名称与类名相同,没有返回值类型,主要用于在创建对象的时候进行一些初始化操作,如一个类中没有构造方法,java会默认给一个无参的构造方法

  6. jsp 错误码debug记录与总结

    500: 编码错误: 无法向cookie中写入中文字符串 需要使用URLEncoder.Encode()在写入处进行转码,使用URLDecoder.decoder()在读取处进行解码 或者使用requ ...

  7. 通知 Notification

    1. NotificationManager ma=(NotificationManager) context.getSystemService(context.NOTIFICATION_SERVIC ...

  8. 64位系统上使用PLSQL Dervloper解决方案

    win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法  2012-04-15 01:28:37|  分类: 默认分类 |  标签: |字号大中小 订阅 . w ...

  9. WebService到底是什么?

    一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...

  10. JavaScript 常用算法

    1.排序算法 (1)冒泡排序,冒泡排序其实就是通过比较相邻位置的元素大小,如果左边比右边大,就交换位置,继续比较,实际上就是每轮比较都得出一个最大值,然后通过多伦比较得出. function bubb ...