MVC+EF+Linq 实例

天才第一步:创建数据库

在这里插入图片描述
创建数据库的代码:

create table category(
id int primary key,
name nvarchar(20)
)

create table news(
id int primary key,
title nvarchar(20),
content nvarchar(200),
createTime datetime ,
caid int constraint fk_ca_id foreign key references category(id) 
)



create table comment(
id int primary key,
content nvarchar(100),
createTime dateTime,
userIp nvarchar(50),
newsId int constraint fk_news_id foreign key references news(id)
)

手动添加一些数据
在这里插入图片描述

天才第二步:创建MVC工程文件

   在这里插入图片描述

天才第三步:在Models文件夹下创建EF

在这里插入图片描述

在这里插入图片描述
“来自数据库的EF设计器” ,下一步
在这里插入图片描述
选择数据库,如果服务器用的是本地(.),下面就选择Windows身份验证,然后找到自己的数据库
在这里插入图片描述
下面的”另存为“的名称默认就好
在这里插入图片描述
勾选自己需要的表
在这里插入图片描述
这就是创建好EF的样子偶~~~

             在这里插入图片描述

天才第四步:编码–修改三个页面

一、首先是控制器(HomeCotroller)名字是默认生成的,也可以自己修改!
在这里插入图片描述
HomeController

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

namespace MVC_YZY.Controllers
{
    //1、控制器类(继承了controller)
    public class HomeController : Controller
    {      
        /// <summary>
        /// 数据上下文对象
        /// </summary>
        newssystemEntities db = new newssystemEntities();
        
        #region 1、 查询 文章 列表 +ActionResult Index()
        /// <summary>
        /// 查询 文章 列表
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            //1.查询 数据库里的 文章数据(通过 EF 执行)
            //1.1第一种方式:使用 SQO(标准查询运算符) 查询所有未软删除的文章
            //实际返回的是 一个 IQueryable 对象?此处其实是返回了一个 IQueryable 接口的子类对象
            //IQueryable<newssystemEntities> query= db.news.Where(d => d.AIsDel == false);
            //此时真实返回的类型未 DbQuery<T> 支持 延迟加载!只有当使用道数据的时候,才去 查询数据库
            //DbQuery<newssystemEntities> query = (db.news.Where(d => d.AIsDel == false)) as DbQuery<newssystemEntities>;

            //直接将 返回的 DbQuery 转成 List<T>集合,也就是立即查询数据库,并返回查询到的集合
            //List<news> list = db.news.Where(d => d.caId == 0).ToList();

            //1.2第二种方式:使用 Linq语句 查询所有新闻标题
            //Linq 仅仅是给程序员用的 语法糖,.NET编译器会再编译程序集(中间代码)的时候,将linq语句转成 SQO(标准查询运算符)
            List<news> list = (from d in db.news where d.caId != 0 select d).ToList();

            //2.将集合数据传给视图
            //ViewBag.DataList = list;
            ViewData["DataList"] = list;

            //3."加载" 视图
            return View();
        }
        #endregion

        #region 2、 执行删除操作(根据ID)+ActionResult Del(int id)
        /// <summary>
        /// 执行删除操作(根据ID)
        /// </summary>
        /// <param name="id">要删除的新闻ID -/home/del/12</param>
        /// <returns></returns>
        public ActionResult Del(int id)//此ID会根据路由的url 配置{id}占位符,而被 12 替换掉
        {
            //先查询出来再删除
            var modelDel = db.news.FirstOrDefault(n => n.id == id);
            db.news.Remove(modelDel);
            int  res= db.SaveChanges();
            return RedirectToAction("Index", "Home");    
        }
        #endregion

        #region 3、 显示要修改的数据 +ActionResult Modify(int id)
        [HttpGet]
        /// <summary>
        /// 0.4 显示要修改的数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Modify(int id)
        {
            #region 本步骤的思路
            //1、获取选中的新闻 显示到一个新的页面。
            /*
             * 
             * 首先 根据newsid获取该新闻的信息 
             * 将新闻的标题和内容显示再文本框中
             * 
             * 然后查询所有的新闻分类,显示在下拉框中
             * 
             * 最后根据该新闻的类别 设置为下拉框的默认选中
            */
            //news n = (from a in db.news where a.caId==0 select a).FirstOrDefault();
            //IEnumerable<SelectListItem> m = (from c in db.categories select c).ToList().Select(c => new SelectListItem { Value = c.id.ToString(), Text = c.name });
            #endregion

            news n = db.news.Find(id);
            ViewBag.newTitle = n.title;
            ViewBag.newContent = n.content;

            var categories = from c in db.categories select c;
            var temp = new SelectList(categories, "id", "name",n.caId);

            ViewBag.categories = temp;
            
            return View();

       
        }
        #endregion


        #region 执行修改 +ActionResult Modify(news news)
        [HttpPost]
        /// <summary>
        /// 执行修改
        /// </summary>
        /// <param name="news"></param>
        /// <returns></returns>
        public ActionResult Modify2()
        {
            //首先,找到对象
            int newid =Convert.ToInt32( Request.Form["id"]);
            var n = db.news.FirstOrDefault(m => m.id == newid);
            //var n = db.news.Find(id);
            
            //然后,更新数据对象
            n.caId =Convert.ToInt32( Request.Form["dropCate"]);
            n.content = Request.Form["txtContent"];
            n.title = Request.Form["newTitle"];

            //最后,保存修改
            db.SaveChanges();
            return RedirectToAction("Index", "Home"); 
        }
        #endregion
    }
}

二、然后是Index.cshtml页面

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

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <style type="text/css">
        #tbList {
            border: 1px solid #0094ff;
            width: 800px;
            margin: 10px auto;
            border-collapse: collapse;
            text-align: center
        }

            #tbList th, td {
                border: 1px solid #0094ff;
                padding: 10px;
                text-align: center
            }
    </style>

    <script type="text/javascript">
        function Del(id) {
            if (confirm("您确认要删除么?")) {
                window.location = "/Home/Del/" + id;
            }
        }
        function Modify(id) {
            window.location = "/Home/Modify/" + id;
        }
    </script>
</head>
<body>
    <div>
        <table id="tbList">
            <tr>

                <th>ID</th>
                <th>标题</th>
                <th>内容</th>
                <th>发布时间</th>
                <th>CaId</th>
                <th>操作</th>
            </tr>

            <!--遍历 action方法 设置给 ViewData 的集合数据,生成HTML 代码-->
            @foreach (news a in ViewData["DataList"] as List<news>)
            {
                <tr>
                    <td>@a.id</td>
                    <td>@a.title</td>
                    <td>@a.content</td>
                    <td>@a.createTime</td>
                    <td>@a.caId</td>
                    <td>
                        <a href="javascript:Del( @a.id)">删除</a>
                        <a href="javascript:Modify(@a.id)">修改</a>

                    </td>

                </tr>
            }
        </table>
    </div>
</body>
</html>

三、最后是 Modify.cshtml 页面
在这里插入图片描述

@model MVC_YZY.Models.news
<!--指定页面Model的属性 类型-->
@{
                Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>修改</title>
    <style type="text/css">
        #tbList {
            border: 1px solid #0094ff;
            width: 400px;
            margin: 10px auto;
            border-collapse: collapse;
        }

            #tbList th, td {
                border: 1px solid #0094ff;
                padding: 10px;
            }
    </style>
</head>
<body>
    @using (Html.BeginForm("Modify2", "Home", FormMethod.Post))
    {
        <table id="tbList">
            <tr>
                <td colspan="2">修改 @Html.HiddenFor(a => a.id)</td>
            </tr>
            <tr>
                <td>标题:</td>
                @*<td>@Html.TextBox("txtName", (object)Model.ATitle)</td>*@
                <!--使用HTMLHelper强类型方法 直接 从MOdel 中根据title属性生成文本框-->
                <td>@Html.TextBox("newTitle", ViewBag.newTitle as string)</td>
            </tr>
            <tr>
                <td>分类:</td>
                <!--使用强类型方法根据 标题 属性生成下拉框 并自动根据model属性里的title 设置下拉框的 默认选中项-->
                @*<td>@Html.DropDownListFor(a=>a.id, ViewBag.CateList as IEnumerable<SelectListItem>)</td>*@
                <td>@Html.DropDownList("dropCate",ViewBag.categories as SelectList) </td>
            </tr>
            <tr>
                <td>内容:</td>
                <!--使用HTMLHelper强类型方法 直接 从MOdel 中根据content属性生成文本域-->
                @*<td>@Html.TextAreaFor(a => a.content, 10, 60, null)</td>*@
                <td>@Html.TextBox("txtContent", ViewBag.newContent as string)</td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="确定修改" />@Html.ActionLink("返回", "Index", "Home")</td>
            </tr>
        </table>       
    }
</body>
</html>

天才第五步:查看运行效果

一、删除页面

在这里插入图片描述

二、修改页面
在这里插入图片描述

API:应用编程接口,是一个新的(API)应用编程接口 本质上它是命名空间和类的一个集合,他的目标是:查询任意来源的数据。 数据库、业务对象、XML文件、一个数据集 1、所需要数据均出自相同的数据源,可能性很小。数据库、业务对象、XML文件、一个数据集,Web服务端 2、访问数据的难易程度完全取决于数据的存储位置。访问一个内存中的对象会比访问XML文件数据库容易。 3、原数据自身一般不是最主要显示的结果。一旦要进行整理,它就须要排序、修改、分组、调序。循环遍历,合并入一个数据池,等等。 List<Book> book=GetBooks(); //排序 Books.SortByPrice(delegate(Book first,Book second)) { Return((double)(second.Price-first.Prince)); } //遍历运算求总计 Double totallncome=0; Books.Foreach(delegate(Book book)) { Totallcome+=(book.Price*book.TotalSales); } 以上六行包含了排序,循环,合并运算,价格数据不是通过不同的类别的电子表格,Web服务或XML输入的 让数据源更易于访问,可以连接不同的数据源的数据,并且对他们执行标准化的数据处理操作,全部只需要一行代码完成。 例如:提供可以确保所有数据字段是通用类的操作,这样就必担心从数据库获取数据时类型正确转换问题。 一些数据源本没有DataProvider的支持,可以提供一种措施易于开发人员做功能扩展,创建一个支持这些数据源的Provider。 Var Query=from book in Books Where book.QuarterlySales>0 Select book=>{Name,(Price*QuarterlySales)} 四个属性和一个静态方法,该方法把五本书列表返回给任何需要该数据的页面,这里有一个C#3.0语言中的一个特性一一对象新转化器(object)
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨幂等

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值