搭建三层架构(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层是另外三个层必须引用的。

时间: 2024-07-29 13:30:10

搭建三层架构(ASP.NET MVC+EF)的相关文章

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

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这个权限系统的初步设计-框架搭建,首先我要说的是我们需要开发工具Visual Studio 2012或者10也行,其次是我们要有SQL Server数据库,如果是Visual Studio 2010的话,你还要安装MVC4的开发文件,这个是吗?我不记得了,谁可以回答我一下的,我一直用2012,都是集成

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

http://www.cnblogs.com/darrenji/p/3809219.html 本篇为系列第一篇,包括: ■ 1.搭建项目■ 2.卸载Entity Framework组件,并安装最新版本■ 3.使用EF Code First创建领域模型和EF上下文■ 4.三层架构设计    □ 4.1 创建DAL层        ※ 4.1.1 MySportsStore.IDAL详解        ※ 4.1.2 MySportsStore.DAL详解 1.搭建项目 MySportsStore.

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

本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移. 创建一个ASP.NET MVC 4 网站. 在Models文件夹内创建Person类. public class Person { public int ID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } 在Controls文件夹内创建PersonControlle

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

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)  (1)框架搭建    (2):数据库访问层的设计Demo 前言:这篇博客在数据访问层的基础上面我们继续学习对这个Demo的开发,希望大家都好好理解一下这个Demo的架构,到最后我实现权限的时候我就简单的说一下搭建过程就OK了,因为这个Demo的思想就是按照权限的设计方式去设计的,下面我们开始介绍面向接口的编程思想,如果感觉好的话可以

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

http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个 项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个 系列

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

4.为什么使用MVC而不是用WebForm呢? (1)为什么使用MVC而不是用WebForm呢?这个是我临时想的,因为我就是想说明一下WebForm和MVC的优缺点,来可以使大家能够更好地理解 MVC和WebForm,而不像某些人说MVC会替代WebForm,我个人认为这个可能性很小,因为各有各的好处,看在哪里使用吧,下面我就简单介绍下 WebForm和MVC的优缺点. (2)WebForm介绍 1)优点 1):支持事件模型,取决于微软提供了丰富的服务器端组建,WebForm可以快速的搭建Web

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程 前言:前面几篇博客我们基本已经介绍完了搭建整个项目和数据库访问层以及一些业务逻辑层的实现,当然了,我们的数据库访问层这样还是可以在进行封装的,但是我到这里就行了吧,项目也不大,不需要那么麻烦的,那么我们今天开始介绍我们需要介绍的内容,那就是我

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这篇博客我们继续来实现我的权限系列,这个博客一段时间也没有写了,重点是我在想还写不写,最终我决定还是写下去,因为我们是为了学习,当别人提出意见的时候,我们可以参考和采纳,但是我们不一定非要采纳,上几篇博客大家都说用CodeFirst来实现,是啊,现在基本很少有人用我的这种方法来实现了,都是用CodeF

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现 前言:通过前面的五篇博客我们已经对权限系统的后台架构进行了详细的说明,那么我再前面的博客中也说到了我们的后台架构还会再改的,我准备这段时间我们继续完善我们的后台

记录我的ASP.NET MVC+EF的印记

首先我想大家对ASP.NET MVC+EF并不陌生,可悲的是小菜我从2012年知道他的存在直到现在才开始学习.可以说是浪费了很多时间,由于楼主一直使用ADO.NET+三层的模式,所以总觉得有自己的一番天地,同时在此呼吁还有像我一样的橙色猿或攻城师们请正视它,时代的脚步不会因为你们而停留.但最近一段时间可以说是2014年下半年,整个行情都是在使用ASP.NET MVC+EF或者其他持久层来搭建项目.大势所趋不得不正视它了. 楼主的MVC水平还停留在2.0的水平,可想而知.当时是出于项目需要而使用了