【ASP.NET MVC】EF6(Entity Framework 6)数据库

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());//
        }
  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值