ASP.NET MVC5+EF6搭建三层实例
一、创建项目解决方案
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搭建三层实例的更多相关文章
- 用ASP.NET MVC5 +SQLSERVER2014搭建多层架构的数据库管理系统
用http://ASP.NET MVC5 +SQLSERVER2014搭建多层架构的数据库管理系统 背景:前段时间,给一家公司做外包(就是图标是朵菊花那家).为了尽快实现交付,网上四处寻找适合中小型企 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)
开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 任务调度系统界面 http: ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入
系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级
系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...
- 关于ASP.NET或VS2005 搭建三层架构的理解
最近想学习ASP.NET建网站,关于ASP.NET或VS2005 搭建三层架构的理解,网上摘录了一些资料,对于第(2)点的讲解让我理解印象深刻,如下: (1)为何使用N层架构? 因为每一层都可以在仅仅 ...
- 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 ...
- 构建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. ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试
1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...
- 构建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简单的登录并 ...
随机推荐
- CentOs笔记
系统 CentOs7,最小安装,使用 Ext4,/ ,/boot,/swap 使用标准分区,另一个分区做为数据分区,使用 LVM. 更新: http://mirrors.163.com/.help/c ...
- Wix 安装部署教程(九) --用WPF做安装界面
经常安装PC端的应用,特别是重装系统之后,大致分为两类.一类像QQ,搜狗输入法这样的.分三步走的:第一个页面可以自定义安装路径和软件许可.第二个页面显示安装进度条,第三个页面推荐其他应用.先不管人家怎 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- 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 ...
- Silverlight中将WriteableBitmap互转byte数组
//WriteableBitmap to ARGB ; , result, , len); , bmp.Pixels, , buffer.Length); }
- js模版引擎handlebars.js实用教程——if-判断的基本用法
返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...
- Winform文件下载之WinINet
在C#中,除了webclient我们还可以使用一组WindowsAPI来完成下载任务.这就是Windows Internet,简称 WinINet.本文通过一个demo来介绍WinINet的基本用法和 ...
- Java使用snakeyaml解析yaml
YAML Yaml是一种"是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言."类似于XML但比XML更简洁,语法详见 http://www.ruan ...
- iOS UITableView行高自行扩展
myTableView.estimatedRowHeight = ; myTableView.rowHeight = UITableViewAutomaticDimension; 不需要实现 - (C ...
- Atitit 图像处理 公共模块 矩阵扫描器
Atitit 图像处理 公共模块 矩阵扫描器 1.1. 调用说明对矩阵像素遍历处理调用1 2. 矩阵扫描器主题结构1 2.1. 主要说明 从像素点开始填充矩阵1 2.2. 得到模板中心点所对应的图像坐 ...