Entity Framework 6
Entity Framework 6是经试验和测试的关系映射器 (O/RM ,Object Relational Mapping对象关系映射),适用于 .NET 的对象,其功能和稳定性经过了多年的开发和调试。
作为 O/RM,EF6 降低了关系方面和面向对象的方面之间的阻抗不匹配,使开发人员能够使用表示应用程序域的强类型 .NET 对象来编写应用程序,该应用程序可与存储在关系数据库中的数据交互,同时使开发人员无需再编写大部分的数据访问“管道”代码。
一、安装EF6
安装EF6
1.安装Entity Framework 程序包
(1). 在解决方案上单击右键,在弹出的菜单中选择【管理解决方案的NuGet程序包(N)…】;
(2).选择EntityFramework;
(3).选中要安装程序包的项目,点【安装】按钮;
二、开始使用EF6(EntityFramwork)
1.新建项目yingbo.EF.Model,也可以用别的名字;
2.在【新建项目】页面 搜索(类库);选择模板为:【类库(.NET Framework)c# windows 库】;
3.在【配置新项目】页面上,输入项目名称yingbo.EF.Model,点【创建】按钮;
4.添加数据库访问类ADO,可以命名为:CustomerContext;也可以是别的名字;
5.系统会自动生成数据访问通道,也就是给每一个选中的表,生成一个类,咱们直接引用就可以了;
6.新建一个控制器DwController,一列表形式呈现数据;
控制器中有增删改查,等方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using yingbo.EF.Model;
namespace yingbo.ASP.NET.MVCS.Project.Controllers
{
public class DwController : Controller
{
// GET: Third
//bm_dw dw = new bm_dw();
CustomerContext ccc = new CustomerContext();
public ActionResult Index()
{
//bm_dw bm_dw = ccc.bm_dw.FirstOrDefault();
List<bm_dw> dwlist = ccc.bm_dw.ToList();
ViewBag.dwlist = dwlist;
ViewData.Model = dwlist;
return View();
}
public ActionResult Add()
{
//string Sm = Request["sm"].ToString();
//if (Sm != "0")
//{
// bm_dw dw = ccc.bm_dw.SingleOrDefault(t => t.sm == Sm);
// ViewBag.Model = ccc.bm_dw.SingleOrDefault(t => t.sm == Sm);
//}
return View();
}
//Save():处理add表单传递过来的数据
//从前端视图获取数据
public ActionResult Save()
{
//获取表单提交的数据
//将数据添加到数据库中:1.创建对象,2.将获取的值封装到对象中,3.将对象交给
bm_dw savedw = new bm_dw();
savedw.xh = Request["xh"];
savedw.sm = Request["sm"];
ccc.Entry(savedw).State = System.Data.Entity.EntityState.Added;//修改savedw的更新状态
ccc.bm_dw.Add(savedw);
ccc.SaveChanges();
//更新完成之后,应该执行控制器的另外一个方法Index()
//return View("Index");
//跳转到本控制器的Action动作:Index()方法
return Redirect("Index");
}
public ActionResult FormSave(FormCollection fc)
{
//获取表单提交的数据
//将数据添加到数据库中:1.创建对象,2.将获取的值封装到对象中,3.将对象交给
bm_dw savedw = new bm_dw();
savedw.xh = fc["xh"];
savedw.sm = fc["sm"];
ccc.Entry(savedw).State = System.Data.Entity.EntityState.Added;//修改savedw的更新状态
ccc.bm_dw.Add(savedw);
ccc.SaveChanges();
//更新完成之后,应该执行控制器的另外一个方法Index()
//return View("Index");
//跳转到本控制器的Action动作:Index()方法
return Redirect("Index");
}
[HttpPost]
public ActionResult Save(string xh,string sm,HttpPostedFileBase photo)
{
/*上传文件
View准备:
1.上传文件时,需要一个表单用于提交数据,表单应该添加一个属性enctype="multipart/form-data"
2.提交按钮
Controller准备:
1.可以通过数据自动装配功能获取到上传的文件对象
2.用file.Saveas()实现文件上传
*/
if (photo != null)
{
photo.SaveAs(Server.MapPath("~/images/") + photo.FileName);
}
else { return Redirect("Index"); }
//获取表单提交的数据
//将数据添加到数据库中:1.创建对象,2.将获取的值封装到对象中,3.将对象交给
bm_dw savedw = new bm_dw();
savedw.xh = xh;
savedw.sm = sm;
savedw.photo = photo.FileName;
ccc.Entry(savedw).State = System.Data.Entity.EntityState.Added;//修改savedw的更新状态
ccc.bm_dw.Add(savedw);
ccc.SaveChanges();
//更新完成之后,应该执行控制器的另外一个方法Index()
//return View("Index");
//跳转到本控制器的Action动作:Index()方法
return Redirect("Index");
}
public ActionResult Edit() {
string ls_sm = Request["sm"];
bm_dw editdw = ccc.bm_dw.SingleOrDefault(t => t.sm == ls_sm) ;
ViewData.Model = editdw;
return View();
}
[HttpPost]
public ActionResult Edit(string xh, string sm, HttpPostedFileBase photo) {
if (photo != null)
{
photo.SaveAs(Server.MapPath("~/images/") + photo.FileName);
}
else { return Redirect("Index"); }
//获取表单提交的数据
//将数据添加到数据库中:1.创建对象,2.将获取的值封装到对象中,3.将对象交给
bm_dw savedw = new bm_dw();
savedw.xh = xh;
savedw.sm = sm;
savedw.photo = photo.FileName;
ccc.Entry(savedw).State = System.Data.Entity.EntityState.Modified;//修改savedw的更新状态
ccc.SaveChanges();
//更新完成之后,应该执行控制器的另外一个方法Index()
//return View("Index");
//跳转到本控制器的Action动作:Index()方法
return RedirectToAction("index");
}
public ActionResult Delete()
{
//获取表单提交的数据
//将数据添加到数据库中:1.创建对象,2.将获取的值封装到对象中,3.将对象交给
string lsdw = Request["sm"].ToString();
bm_dw dw = ccc.bm_dw.SingleOrDefault(t=>t.sm==lsdw);
ccc.Entry(dw).State = System.Data.Entity.EntityState.Deleted;//修改savedw的更新状态
ccc.bm_dw.Remove(dw);
ccc.SaveChanges();
//更新完成之后,应该执行控制器的另外一个方法Index()
//return View("Index");
//跳转到本控制器的Action动作:Index()方法
return RedirectToAction("index");
}
[HttpPost]
public ActionResult select() {
string dws = Request["sm"].ToString();
List<bm_dw> dwlist = ccc.bm_dw.Where(t => t.sm == dws).ToList();
//ViewBag.dwlist = dwlist;
ViewData.Model = dwlist;
return View("index");//Content(Request["sm"].ToString());//
}
}
}
7.呈现数据
在代码 bm_dw bm_dw = ccc.bm_dw.FirstOrDefault(); 后设置断点,运行,访问/dw/index/就能看到数据库表bm_dw中的数据了。
8.数据呈现
为Index方法添加新的视图,在控制器中用ViewBag将数据传递给视图,展示得到的数据
控制器的Index()方法,通过CustomerContext模型实例ccc,从数据库检索数据,然后调动视图Index.cshtml呈现到前端;:
public class DwController : Controller
{
public ActionResult Index()
{
using (CustomerContext ccc = new CustomerContext())
{
ViewBag.dwlist = ccc.bm_dw.ToList();
}
return View();
}
public ActionResult Add()
{
return View();
}
}
列表视图页面 Index.cshtml,呈现数据到前端
@using yingbo.EF.Model
@model List<yingbo.EF.Model.bm_dw>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
List<bm_dw> dw_list = Model;//ViewBag.dwlist;//两种值传递方式都可以将后台数据传递到视图页面
}
<h2>标准计量单位</h2>
<a href = "Add" class="btn btn-success"> 添加</a>
@using (Html.BeginForm("select", "dw", FormMethod.Post))
{
@Html.TextBox("sm", "请输入计量单位名称!")
<input type="submit" value="查询" class="btn btn-success" />
}
<table class="tab-content table table-bordered table-hover">
<thead>
<tr><td>编号</td><td>描述</td><td>图片</td><td>操作</td></tr>
</thead>
<tbody>
@foreach (bm_dw item in dw_list)
{
<tr>
<td>@item.xh</td>
<td>@item.sm</td>
<td><img src="~/images/@item.photo " style="width:50px;height:70px" /></td>
<td>@Html.ActionLink("编辑", "edit", "dw", new { sm = item.sm }, new { @class = "btn btn-danger" })</td>
<td>@Html.ActionLink("删除", "Delete", "Dw", new { sm = item.sm }, new { @class = "btn btn-danger" })</td>
</tr>
}
</tbody>
</table>
9. 添加新数据
(1)控制器的增加Action动作:Add(),控制数据在Add.cshtml视图呈现数据。
(2)为Add()动作添加视图页面,Add.cshtml
(3) 页面上的提交按钮,调用控制器的Save()方法将数据保存到数据库;
注意:
注释:想要以表单的形式提交到服务器,需要在页面加一个表单form
- method:用什么方式提交表单;
- action:方法名称,提交的表单内容给本方法处理;
Add.cshtml视图:
@model yingbo.EF.Model.bm_dw
@{
ViewBag.Title = "增加标准计量单位";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<!-- 注释:想要以表单的形式提交到服务器,需要在页面加一个表单form
method:用什么方式提交表单;
action:方法名称,提交的表单内容给本方法处理;
input: 必须为元素的name属性,
Action方法中用Request["key"]获取页面传递的参数值时,key指的是元素的name属性值-->
<form method="post" action="Save" enctype="multipart/form-data">
<table>
<tr><td>编号:</td><td><input type="text" id="xh" name="xh" /></td></tr>
<tr><td>描述:</td><td><input type="text" id="sm" name="sm"/></td></tr>
<tr><td>图片:</td><td><input type="file" id="photo" name="photo" /></td></tr>
<tr><td><input id="submit" type="submit" value="提交" class="btn btn-success" /></td></tr>
</table>
</form>
10. FormCollection页面取值
FormCollection
11.修改数据
控制器中的edit()方法从列表视图Index.cshtml跳转到编辑页面Edit.cshtml
页面上的提交按钮,调用控制器的 [HttpPost] Edit(string xh, string sm, HttpPostedFileBase photo) 方法,
将数据保存到数据库;
public ActionResult Edit() {
string ls_sm = Request["sm"];
bm_dw editdw = ccc.bm_dw.SingleOrDefault(t => t.sm == ls_sm) ;
ViewData.Model = editdw;
return View();
}
[HttpPost]
public ActionResult Edit(string xh, string sm, HttpPostedFileBase photo) {
if (photo != null)
{
photo.SaveAs(Server.MapPath("~/images/") + photo.FileName);
}
else { return Redirect("Index"); }
//获取表单提交的数据
//将数据添加到数据库中:1.创建对象,2.将获取的值封装到对象中,3.将对象交给
bm_dw savedw = new bm_dw();
savedw.xh = xh;
savedw.sm = sm;
savedw.photo = photo.FileName;
ccc.Entry(savedw).State = System.Data.Entity.EntityState.Modified;//修改savedw的更新状态
ccc.SaveChanges();
//更新完成之后,应该执行控制器的另外一个方法Index()
//return View("Index");
//跳转到本控制器的Action动作:Index()方法
return RedirectToAction("index");
}
编辑视图Edit.cshtml
@model yingbo.EF.Model.bm_dw
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>编辑标准计量单位</title>
</head>
<body>
<!-- 注释:想要以表单的形式提交到服务器,需要在页面加一个表单form
method:用什么方式提交表单;
action:方法名称,提交的表单内容给本方法处理;
input: 必须为元素的name属性,
Action方法中用Request["key"]获取页面传递的参数值时,key指的是元素的name属性值-->
<form method="post" action="Edit" enctype="multipart/form-data">
<table>
<tr><td>编号:</td><td>@Html.DisplayFor(t=>t.xh) @Html.HiddenFor(t => t.xh)</td></tr>
<tr><td>描述:</td><td>@Html.TextBoxFor(t=>t.sm)</td></tr>
<tr><td>图片:</td><td><img src="~/images/@Model.photo" style="width:70px;height:120px"/></td></tr>
<tr><td colspan="2"><input type="file" id="photo" name="photo" /></td></tr>
<tr><td><input id="submit" type="submit" value="提交" class="btn btn-success" /></td></tr>
</table>
</form>
</body>
</html>
12.删除数据
控制器中的delete()方法调用模型,删除数据
<td>@Html.ActionLink("删除", "Delete", "Dw", new { sm = item.sm }, new { @class = "btn btn-danger" })</td>
delete()方法
public ActionResult Delete()
{
//获取表单提交的数据
//将数据添加到数据库中:1.创建对象,2.将获取的值封装到对象中,3.将对象交给
string lsdw = Request["sm"].ToString();
bm_dw dw = ccc.bm_dw.SingleOrDefault(t=>t.sm==lsdw);
ccc.Entry(dw).State = System.Data.Entity.EntityState.Deleted;//修改savedw的更新状态
ccc.bm_dw.Remove(dw);
ccc.SaveChanges();
//更新完成之后,应该执行控制器的另外一个方法Index()
//return View("Index");
//跳转到本控制器的Action动作:Index()方法
return RedirectToAction("index");
}
13 查询数据
控制器中的select()方法调用模型,将查询条件传递到模型中,并从数据库中查询到数据集List<bm_dw>,调用视图Index.cshtml,在前端呈现
控制器方法select():
[HttpPost]
public ActionResult select() {
string dws = Request["sm"].ToString();
List<bm_dw> dwlist = ccc.bm_dw.Where(t => t.sm == dws).ToList();
//ViewBag.dwlist = dwlist;
ViewData.Model = dwlist;
return View("index");//Content(Request["sm"].ToString());//
}