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

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

搭建步骤:

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. git 新建项目

    备份. 1.cd dirctory 2.git init 3.git.oschina.net 上新建项目. 4.git remote add origin XXX.git 5.git push ...

  2. SG函数模板(转)

    ps:sg[i]为0表示i节点先手必败. 首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数.例如mex{0,1,2,4}=3.me ...

  3. mac下删除svn账号

    以mac os x为例(Unix/Linux类似), 1.打开命令行窗口,即用户的根目录(用户的home目录) $ ls -al drwxr-xr-x   6 linxyz  staff    204 ...

  4. 创建线程方式-NSThread

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  5. jQuery 根据JSON数据动态生成表格

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  6. javascript对象属性的赋值解析

    代码如下: function Animal(){} function Dog (age){ this.name = 'fuck you' ; this.age = age } var dog = ne ...

  7. zookeeper节点失效重连机制

    http://www.blogjava.net/xylz/archive/2011/12/05/365578.html http://blog.csdn.net/tswisdom/article/de ...

  8. git免密码pull,push

    执行git config --global credential.helper store

  9. oracle replace函数

    replace 函数用法如下: replace('将要更改的字符串','被替换掉的字符串','替换字符串') 例如: select t.dqsj,replace(t.dqsj,'16:40','16: ...

  10. 通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系

    先说一下个人理解的结论吧: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类. delegate声明的变量与delegate声明的事件,并没有本质的区别,事件是在dele ...