Asp.Net MVC EF-DbFirst之增删改查

控制器及动作方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Mvc5Test.Models;
using System.Data.Entity.Infrastructure;

namespace Mvc5Test.Controllers
{
    //用户的请求总是先发到控制器的某个Action方法,再由Action方法返回对应的视图
    public class HomeController : Controller
    {
        //数据上下文对象
        BogEntities db = new BogEntities();

        //查询文章
        public ActionResult Index()
        {
            //SQO标准查询运算符
            //DbQuery<ClassType> query = db.ClassTypes.Where(ct => ct.ParentID==0) as DbQuery<ClassType>;
            //List<ClassType> ctList = db.ClassType.Where(ct => ct.ParentID == 0).ToList<ClassType>();

            //Linq
            List<Artical> aList = (from a in db.Artical where a.ClassTypeID != 4 select a).ToList();

            //***使用ViewData传递数据到视图
            ViewData["aList"] = aList;

            return View();
        }

        //删除文章 //此处的默认参数id在App_Start的RouteConfig.cs配置
        public ActionResult Del(int id)
        {
            try
            {
                //1.创建要删除的对象
                Artical a = new Artical { ID = id };
                //2.将对象添加到EF管理容器
                db.Artical.Attach(a);
                //3.将对象包装类的状态标识为删除
                db.Artical.Remove(a);
                //4.更新数据库
                db.SaveChanges();
                //5.更新成功,命令浏览器跳转到列表页
                return RedirectToAction("Index", "Home");
            }
            catch(Exception e)
            {
                return Content("删除失败!!!"+e.Message);
            }
        }

        //修改文章-显示动作
        [HttpGet] //get请求时执行下面这个方法
        public ActionResult Edit(int id)
        {
            //1.根据id查询数据库,返回集合中的第一个对象
            Artical a = (from at in db.Artical where at.ID == id select at).FirstOrDefault();

            //2.生成文章分类数据下拉列表集合
            IEnumerable<SelectListItem> selectList = (from ct in db.ClassType
                                                      select ct).ToList() //从db.ClassType集合中选取元素形成一个新的集合CT
                                                      .Select(ct => new SelectListItem { Value = ct.ID.ToString(), Text = ct.ClassName } //从CT集合中遍历每个元素,并将遍历的每个元素转成SelectListItem对象
                                                      ).ToList();
            //***使用ViewBag传递数据到视图
            ViewBag.CtList = selectList;

            //3.将文章传递给视图
            //***使用View的构造方法,将数据传给视图上名为Model的属性
            return View(a);
        }

        //修改文章-保存动作
        [HttpPost] //post请求时执行下面这个方法
        public ActionResult Edit(Artical model) //此时的model就是页面中待修改的文章实体对象
        {
            try
            {
                //1.将实体对象加入EF对象容器中,并获取伪包装类对象
                DbEntityEntry<Artical> entry = db.Entry<Artical>(model);
                //2.将包装类对象的状态设置为unchanged
                entry.State = System.Data.Entity.EntityState.Unchanged;
                //3.设置被改变的属性
                entry.Property(a => a.Title).IsModified = true;
                entry.Property(a => a.ClassTypeID).IsModified = true;
                //4.提交到数据库,完成更改
                db.SaveChanges();
                //5.更新成功,则命令浏览器重定向到列表页
                return RedirectToAction("Index","Home");
            }
            catch (Exception e)
            {
                return Content("修改失败!!!"+e.Message);
            }
        }

        //新增文章-显示动作
        [HttpGet]
        public ActionResult Add()
        {
            //生成文章分类数据下拉列表集合
            IEnumerable<SelectListItem> selectList = (from ct in db.ClassType
                                                      select ct).ToList() //从db.ClassType集合中选取元素形成一个新的集合CT
                                                      .Select(ct => new SelectListItem { Value = ct.ID.ToString(), Text = ct.ClassName } //从CT集合中遍历每个元素,并将遍历的每个元素转成SelectListItem对象
                                                      ).ToList();
            //***使用ViewBag传递数据到视图
            ViewBag.CtList = selectList;

            return View();
        }

        //新增文章-保存动作
        [HttpPost]
        public ActionResult Add(Artical model)
        {
            try
            {
                //1.将实体对象加入EF对象容器中,并获取伪包装类对象
                DbEntityEntry<Artical> entry = db.Entry<Artical>(model);
                //2.将包装类对象的状态设置为Added
                entry.State = System.Data.Entity.EntityState.Added;
                //3.提交到数据库,完成新增
                db.SaveChanges();
                //4.更新成功,则命令浏览器重定向到列表页
                return RedirectToAction("Index", "Home");
            }
            catch (Exception e)
            {
                return Content("新增失败!!!" + e.Message);
            }
        }
    }
}

首页数据列表视图:

@using Mvc5Test.Models;
@{
    Layout = null;
}

<html>
<head>
    <script type="text/javascript">
        function del(id){
            if (confirm("确定要删除吗?")) {
                window.location.href = "/home/del/" + id;
            }
        }
    </script>
</head>
<body>
    <table>
        <tr>
            <td>id</td>
            <td>title</td>
            <td>class type</td>
            <td>opration</td>
        </tr>
        @foreach (Artical a in ViewData["aList"] as List<Artical>)
        {
            <tr>
                <td>@a.ID</td>
                <td>@a.Title</td>
                <td>@a.ClassType.ClassName</td> <!--a.ClassType是关联自ClassType表ID字段的外键,EF自动进行外键关联查询-->
                <td>
                    <a href="javascript:del(@a.ID)">delete</a>
                    <a href="/home/edit/@a.ID">edit</a>
                </td>
            </tr>
        }
        <tr>
            <td colspan="4">@Html.ActionLink("新增文章","Add","Home")</td>
        </tr>
    </table>
</body>
</html>

新增视图:

@model Mvc5Test.Models.Artical
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Add</title>
</head>
<body>
    @using (Html.BeginForm("Add", "Home", FormMethod.Post))
    {
        <table>
            <tr>
                <td colspan="2">新增</td>
            </tr>
            <tr>
                <td>标题:</td>
                <!--使用HtmlHelper的强类型方法直接从Model中根据Title属性生成文本框-->
                <td>@Html.TextBoxFor(a => a.Title)</td>
            </tr>
            <tr>
                <td>分类:</td>
                <!--使用HtmlHelper的强类型方法生成下拉框,并根据Model的ClassTypeID属性设置默认选中项-->
                <td>@Html.DropDownListFor(a => a.ClassTypeID, ViewBag.CtList as IEnumerable<SelectListItem>)</td>
            </tr>
            <tr>
                <td>
                    <input type="submit" value="确定新增" />
                </td>
                <td>
                    @Html.ActionLink("返回", "Index", "Home")
                </td>
            </tr>
        </table>
    }
</body>
</html>

编辑视图:

@model Mvc5Test.Models.Artical
<!--以上代码是指定页面Model属性的类型 -->
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Edit</title>
</head>
<body>
    @using (Html.BeginForm("Edit", "Home", FormMethod.Post)) {
        <table>
            <tr>
                <td colspan="2">修改</td>
                @Html.HiddenFor(a => a.ID)
            </tr>
            <tr>
                <td>标题:</td>
                @*<td>@Html.TextBox("Title", (object)Model.Title)</td>*@
                <!--使用HtmlHelper的强类型方法直接从Model中根据Title属性生成文本框-->
                <td>@Html.TextBoxFor(a => a.Title)</td>
            </tr>
            <tr>
                <td>分类:</td>
                <!--使用HtmlHelper的强类型方法生成下拉框,并根据Model的ClassTypeID属性设置默认选中项-->
                <td>@Html.DropDownListFor(a=>a.ClassTypeID,ViewBag.CtList as IEnumerable<SelectListItem>)</td>
            </tr>
            <tr>
                <td>
                    <input type="submit" value="确定修改" />
                </td>
                <td>
                    @Html.ActionLink("返回","Index","Home")
                </td>
            </tr>
        </table>
    }
</body>
</html>

  

时间: 2024-12-30 04:08:14

Asp.Net MVC EF-DbFirst之增删改查的相关文章

ASP.NET MVC之Entity Framework增删改查

一.EntityFramework简介 ORM(Object-Relation-Mapping):对象关系映射,主要实现基于面向对象方式操作数据库的各种方法,是一种框架技术.长期以来,C#OOP和数据库操作一直处于分离状态.C#最后的操作都要转换成普通的SQL语句,从开发角度来讲,这种转换工作,对于快速开发来讲,效率会有一定影响.ORM出来以后:这种转换工作,其实由ORM框架本身完成.完成基于对象操作数据. .NET中的ORM框架:.NHibernate.MyBatis.NET.LINQ to

Asp.net Core 2.1使用 EF Core 简单增删改查操作数据库

Asp.net Core 2.1使用 EF Core 简单增删改查操作数据库 大概步骤如下5步: 1.创建项目(Asp.net Core 2.1项目) 2.项目使用EF Core 3.建立实体 4.生成迁移文件(生成数据库) 5.使用VS工具生成视图.控制器代码 示例代码下载  https://github.com/ZhMartincheng/NetCoreDemo.git 1.创建项目(Asp.net Core 2.1项目) 选择.net core 版本2.1 基础项目创建成功 2.项目使用E

用DBContext (EF) 实现通用增删改查的REST方法

我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式介绍如何用DBContext来实现通用增删改查的REST方法,以及实现过程中容易出现的问题. 1. 打开vs2012,新建一个class library的项目 2. 新加一个ADO.NET Entity Data Model项到这个项目 3. 打开App.Config, 修改res://* 为res

使用HttpClient对ASP.NET Web API服务实现增删改查

本篇体验使用HttpClient对ASP.NET Web API服务实现增删改查. 创建ASP.NET Web API项目 新建项目,选择"ASP.NET MVC 4 Web应用程序". 选择"Web API". 在Models文件夹下创建Product类. public class Product { public int Id { get; set; } public string Name { get; set; } public string Categor

asp.net中利用JSON进行增删改查中运用到的方法

//asp.net中 利用JSON进行操作, //增加: //当点击"增加链接的时候",弹出增加信息窗口,然后,在窗体中输入完整信息,点击提交按钮. //这里我们需要考虑这些:我会进行异步提交,使用jquery中的方法,$.post("网页名",JSON,callback); //JSON的写法:{"name":name,"id":id},那我们对其进行假设,比方说,表单中的textbox很多,需要我们填写的信息 //也很多,

Entity - 使用EF框架进行增删改查 - 模型先行

模型先行:先创建数据库实体模型,然后再进行数据库的增删改查. 基本步骤是不变的,可参照 <Entity - 使用EF框架进行增删改查 - 数据库先行> 其中的不同是,在创建数据库实体模型的时候,不是选择已有数据库,而是选择空白.

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查

在第八讲中,我们已经做到了怎么样分页.这一讲主要讲增删改查.第六讲的代码已经给出,里面包含了增删改,大家可以下载下来看下.这讲主要是,制作漂亮的工具栏,虽然easyui的datagrid已经自带可以设置工具栏,我们还是要提取出来,为以后权限控制做更好的准备. 前端代码没有逻辑结果,这也许是我写代码以来写得最轻松的,但也是最繁琐的,因为美工我不是强项,每一次调整都非常的困难,最后我把他调成了这样了: 看得过去的鼓掌一下.样式已经包含在附加代码中了. 大家只要加入以下HTML代码到index上就可以

前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查

AngularJS中的$resource服务相比$http服务更适合与RESTful服务进行交互.本篇后端使用ASP.NET Web API, 前端使用$resource,实现增删改查. 领域和上下文 首先领域先行. public class StudentVm { [Key] public int Id { get; set; } public string Name { get; set; } public string Age { get; set; } } 上下文. public cla

ASP.NET WebAPI 项目示例(增删改查)

1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台. 可以把WebApi看成Asp.Net项目类型中的一种,其他项目类型诸如我们熟知的WebForm项目,Windows窗体项目,控制台应用程序等. WebApi类型项目的最大优势就是,开发者再也不用担心客户端和服务器之间传输的数据的序列化

ASP.NET C# 连接 Oracle数据库增删改查,事务

一.知识介绍 ①ASP.NET 使用的是MVC模式,开发工具Visual studio ,语言C# ②Oracle是比较重型的数据库,这里主要介绍连接数据库,对数据进行具体的使用 ③Visual Studio连接数据库都是需要dll文件,方法相似. 二.步骤 ①新建一个ASP项目 ②右击项目或引用,管理Nuget程序包.搜索Oracle,下载Oracle的dll依赖 ③由于数据库的增删改查常用,放在一个方法中.新建了类库,把方法放入类库中,在项目中需添加引用. 1 using Oracle.Da