一、创建项目解决方案

1.model层、BLL层、Dal层、Common层,都是类库

2.UI层使用MVC5

二、使用EF链接数据库

1.创建实体数据模型

2.选择来自数据库EF设计器

3.创建数据库链接

4.选是,点击下一步,选择实体框架6.x,下一步选择要创建的表

三、创建Dal层中链接数据库操作并实现查询父类与子类

1.在Dal层创建一个BaseDBContext类,用来自定义EF上下文,首先引用EF框架。备注:Dal层需要应用model层。

BaseDBContext类:

 namespace Wchl.EFDal
{
/// <summary>
/// 自定义的EF上下文容器类
/// </summary>
public class BaseDBContext: DbContext
{
/// <summary>
/// 负责根据指定的数据库链接字符串,初始化EF
/// </summary>
public BaseDBContext() : base("name=DonationEntities") { }
}
}

2.创建BaseDal类来存放每个类中共有的方法:查询、新增、编辑、删除、执行Sql语句。

2.1这里先实现一个查询的方法,然后接下来在扩充

BaseDal类:

 namespace Wchl.EFDal
{
/// <summary>
/// 负责操作数据库中的所有表的普通增,删,查,改操作的
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class BaseDal<TEntity> where TEntity:class
{
//1.0实例化EF上下文容器对象
BaseDBContext db = new BaseDBContext(); DbSet<TEntity> _dbset; public BaseDal()
{
//初始化
_dbset = db.Set<TEntity>();
} #region 查询
public List<TEntity> Query(Expression<Func<TEntity, bool>> where)
{
return _dbset.Where(where).ToList();
}
#endregion }
}

2.2创建CompanyDal类和DonationDetailDal来继承BaseDal

CompanyDal类:

 namespace Wchl.EFDal
{
public class CompanyDal:BaseDal<Company>
{
}
}

DonationDetailDal类:

 namespace Wchl.EFDal
{
public class DonationDetailDal:BaseDal<DonationDetail>
{
//可以各自类的独有的方法
}
}

四、在BLL层来调用Dal层 需要应用model层

4.1创建BaseBLL类做为基类,并且调用dal中查询的方法

 namespace Wchl.EFBLL
{
public class BaseBLL<TEntity> where TEntity:class
{
//初始化BaseDal泛型类的对象
BaseDal<TEntity> bdal = new BaseDal<TEntity>(); public List<TEntity> Query(Expression<Func<TEntity, bool>> where)
{
return bdal.Query(where);
}
}
}

4.2创建CompanyBLL类和DonationDetailBLL类来几层父类

DonationDetailBLL类:

 namespace Wchl.EFBLL
{
public class DonationDetailBLL:BaseBLL<DonationDetail>
{
}
}

CompanyBLL类:

 namespace Wchl.EFBLL
{
public class CompanyBLL:BaseBLL<Company>
{
}
}

五、UI层调用bl层l和model层,在home控制器下创建一个test方法 创建视图Views

5.1 创建Test方法

         public ActionResult Test()
{
CompanyBLL cbll = new CompanyBLL(); return View(cbll.Query(c=>true));
}

5.2在创建视图的时候使用布局页,并选择list模板,模型类选择Company (Wchl.EFModel)

5.3 然后在model层中的App.Config文件中把数据库链接,拷贝到UI层Web.config中

5.4运行http://localhost:15725/home/test页面,数据就会显示了

六、完善DAL层中的BaseDal类 实现关联查询、删除、编辑、新增、统一保存的方法

BaseDal类:

 namespace Wchl.EFDal
{
/// <summary>
/// 负责操作数据库中的所有表的普通增,删,查,改操作的
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class BaseDal<TEntity> where TEntity:class
{
//1.0实例化EF上下文容器对象
BaseDBContext db = new BaseDBContext(); DbSet<TEntity> _dbset; public BaseDal()
{
//初始化
_dbset = db.Set<TEntity>();
} #region 查询
public List<TEntity> Query(Expression<Func<TEntity, bool>> where)
{
return _dbset.Where(where).ToList();
} public List<TEntity> QueryJoin(Expression<Func<TEntity, bool>> where,string[] tableNames)
{
//将子类_dbset 赋值给父类的query
DbQuery<TEntity> query = _dbset; foreach (var item in tableNames)
{
//遍历要连表的表名称,最终得到所有连表以后的DbQuery对象
query = query.Include(item);
}
return query.Where(where).ToList();
}
#endregion #region 新增
public void Add(TEntity model)
{
_dbset.Add(model);
}
#endregion #region 编辑
public void Edit(TEntity model,string[] propertyName)
{
if (model == null)
{
throw new Exception("model必须为实体的对象");
}
if (propertyName == null || propertyName.Any() == false)
{
throw new Exception("必须至少指定一个要修改的属性");
} //将model追加到EF容器
DbEntityEntry entry = db.Entry(model); entry.State = EntityState.Unchanged; foreach (var item in propertyName)
{
entry.Property(item).IsModified = true;
}
}
#endregion #region 物理删除
//EntityState.Unchanged
public void Delete(TEntity model, bool isAddedEFContext)
{
if (isAddedEFContext == false)
{
_dbset.Attach(model);
}
//修改状态为deleted
_dbset.Remove(model);
}
#endregion #region 统一执行保存
public int SaveChanges()
{
return db.SaveChanges();
}
#endregion }
}

七、完善BLL层BaseBLL类的方法

BaseBLL类:

 namespace Wchl.EFBLL
{
public class BaseBLL<TEntity> where TEntity:class
{
//初始化BaseDal泛型类的对象
BaseDal<TEntity> bdal = new BaseDal<TEntity>();
#region 查询
public List<TEntity> Query(Expression<Func<TEntity, bool>> where)
{
return bdal.Query(where);
} public List<TEntity> QueryJoin(Expression<Func<TEntity, bool>> where, string[] tableNames)
{
return bdal.QueryJoin(where, tableNames);
}
#endregion #region 新增 public void Add(TEntity model)
{
bdal.Add(model);
} #endregion #region 编辑 /// <summary>
/// 要求:model必须是自己定义的实体,此时没有追加到EF容器中
/// </summary>
/// <param name="model"></param>
public void Edit(TEntity model, string[] propertyName)
{
bdal.Edit(model, propertyName);
} #endregion #region 物理删除 /// <summary>
/// model必须是自己定义的,一般是按照主键来删除
/// </summary>
/// <param name="model">要删除的实体对象</param>
/// <param name="isAddedEFContext">true:表示model以及追加到了ef容器,false:未追加</param>
public void Delete(TEntity model, bool isAddedEFContext)
{
bdal.Delete(model, isAddedEFContext);
} #endregion #region 统一执行sql语句 public int SaveChanges()
{
return bdal.SaveChanges();
} #endregion }
}

八、mvc调用测试

   public ActionResult Test()
{
CompanyBLL cbll = new CompanyBLL(); //新增测试:
Company model = new Company()
{
CName = "测试1111111"
};
cbll.Add(model); //修改
//Company model1 = new Company()
//{
// cID = 8,
// CName = "测试22221"
//}; //cbll.Edit(model1, new string[] { "CName" }); //删除
var model2 = cbll.Query(c => c.cID == 8).FirstOrDefault();
cbll.Delete(model2, true);//执行sql语句 打开关闭了一次ado.net链接 //统一将上面的新增,编辑,删除分别生成insert,update,delete语句一次性发送给数据库执行
cbll.SaveChanges(); return View(cbll.Query(c=>true));
}

ASP.NET MVC5+EF6搭建三层实例的更多相关文章

  1. 用ASP.NET MVC5 +SQLSERVER2014搭建多层架构的数据库管理系统

    用http://ASP.NET MVC5 +SQLSERVER2014搭建多层架构的数据库管理系统 背景:前段时间,给一家公司做外包(就是图标是朵菊花那家).为了尽快实现交付,网上四处寻找适合中小型企 ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级

    系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...

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

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

  6. ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用

    文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC ...

  7. 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统

    开篇:从50开始系统已经由MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+EF6+Unity4.x+Quartz 2.3 +easyui 1.4. ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试

    1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...

  9. 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(66)-MVC WebApi 用户验证 (2)

    前言: 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(65)-MVC WebApi 用户验证 (1) 回顾上一节,我们利用webapi简单的登录并 ...

随机推荐

  1. CentOs笔记

    系统 CentOs7,最小安装,使用 Ext4,/ ,/boot,/swap 使用标准分区,另一个分区做为数据分区,使用 LVM. 更新: http://mirrors.163.com/.help/c ...

  2. Wix 安装部署教程(九) --用WPF做安装界面

    经常安装PC端的应用,特别是重装系统之后,大致分为两类.一类像QQ,搜狗输入法这样的.分三步走的:第一个页面可以自定义安装路径和软件许可.第二个页面显示安装进度条,第三个页面推荐其他应用.先不管人家怎 ...

  3. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  4. Fix catalyst driver in Ubuntu 13.04 / 13.10

    Fix catalyst driver in Ubuntu 13.04 / 13.10(墙外文章备份) 1. Introduction I found lots of people strugglin ...

  5. Silverlight中将WriteableBitmap互转byte数组

    //WriteableBitmap to ARGB ;    , result, , len);    , bmp.Pixels, , buffer.Length); }

  6. js模版引擎handlebars.js实用教程——if-判断的基本用法

    返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...

  7. Winform文件下载之WinINet

    在C#中,除了webclient我们还可以使用一组WindowsAPI来完成下载任务.这就是Windows Internet,简称 WinINet.本文通过一个demo来介绍WinINet的基本用法和 ...

  8. Java使用snakeyaml解析yaml

    YAML Yaml是一种"是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言."类似于XML但比XML更简洁,语法详见 http://www.ruan ...

  9. iOS UITableView行高自行扩展

    myTableView.estimatedRowHeight = ; myTableView.rowHeight = UITableViewAutomaticDimension; 不需要实现 - (C ...

  10. Atitit 图像处理 公共模块 矩阵扫描器

    Atitit 图像处理 公共模块 矩阵扫描器 1.1. 调用说明对矩阵像素遍历处理调用1 2. 矩阵扫描器主题结构1 2.1. 主要说明 从像素点开始填充矩阵1 2.2. 得到模板中心点所对应的图像坐 ...