第一,创建数据库

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

第四,修改3个页面

1.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVCBlog.Models;
using System.Data; namespace MVCBlog.Controllers
{
public class HomeController : Controller
{ /// <summary>
/// 数据上下文对象
/// </summary>
BlogDBEntities db = new BlogDBEntities(); #region 查询新闻列表+ActionResult Index()
/// <summary>
/// 查询新闻列表
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
//1.查询数据库里的新闻数据(通过EF执行)
//1.1第一种方法:使用SQO(标准查询运算符),查询所有新闻
//db.news.Where(d =>d.id !=0 );
//List<Models.news> list = db.news.Where(d => d.id != 0).ToList (); //1.2第二种方法:使用linq语句,查询所有新闻标题
//Linq仅仅是给程序员使用的语法糖,.net编译器会在编译时将linq转化为sqo
List<Models.news> list = (from d in db.news where d.id != select d).ToList(); //2.将数据集合传给视图
ViewData["datalist"] = list; //3.加载视图 return View();
}
#endregion #region 执行删除操作(根据id)+ActionResult Del(int id)
/// <summary>
/// 执行删除操作(根据id)
/// </summary>
/// <param name="id">要删除的新闻id</param>
/// <returns></returns>
public ActionResult Del(int id)
{
try
{
//1.创建要删除的对象
news modelDel = new news() { id = id };
//2.将对象添加到EF管理容器中
db.news.Attach(modelDel);
//3.将对象包装类的状态标识为删除状态
db.news.Remove(modelDel);
//4.更新到数据库
db.SaveChanges();
//5.更新成功,则令浏览器跳转到list方法
return RedirectToAction("Index", "Home");
}
catch (Exception ex)
{
return Content("删除失败!" + ex.Message);
}
}
#endregion #region 显示要修改的数据(根据id)+ActionResult Modify(int id)
[HttpGet]
/// <summary>
/// 执行修改操作(根据id)
/// </summary>
/// <param name="id">要修改的新闻id</param>
/// <returns></returns>
public ActionResult Modify(int id)
{
try
{
//根据id查询数据库,返回集合中,拿到第一个实体对象
news n = (from a in db.news where a.id == id select a).FirstOrDefault();
//生成分类下拉框列表集合List<SelectListItem> list
IEnumerable<SelectListItem> listitem = (from c in db.categories select c).ToList().Select(c => new SelectListItem { Value = c.id.ToString(), Text = c.name });
ViewBag.CateList = listitem; //将n传递给视图显示 viewbag 或者viewdata //加载视图,使用view的构造函数 将数据传给视图上的名为model的属性
return View(n);
}
catch (Exception ex)
{
return Content("修改失败!" + ex.Message);
}
}
#endregion #region 执行修改操作+ActionResult Modify(news model)
[HttpPost]
/// <summary>
/// 执行修改操作
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public ActionResult Modify(news model)
{
try
{
//将实体对象加入到EF对象容器中,并获取伪包装类对象
var entry = db.Entry<news>(model);
//将包装类对象的状态设置为unchanged
entry.State = System.Data.Entity.EntityState.Unchanged;
//设置需要提交的实体属性
entry.Property(a => a.title).IsModified = true;
entry.Property(a => a.content).IsModified = true;
//提交到数据库 完成修改
db.SaveChanges();
//5.更新成功,则令浏览器跳转到list方法
return RedirectToAction("Index", "Home");
}
catch (Exception ex)
{
return Content("修改失败!" + ex.Message);
} }
#endregion } }

2.

<span style="font-size:18px;">
@using MVCBlog.Models
@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<title>Index</title>
<style type="text/css">
#tblist {
border: 1px solid #0ff;
width: 800px;
margin: 10px auto;
border-collapse: collapse;
} #tblist th, td {
border: 1px solid #0ff;
padding: 10px;
}
</style>
<script type="text/javascript">
function Del(id) {
alert("运行到了这里");
if (confirm("您确定要删除吗?亲~~")) {
window.location = "/Home/Del/" + id;
}
}
function Modify(id) {
window.location = "/Home/Modify/" + id;
} </script>
</head>
<body>
<table id="tblist">
<tr>
<th>id</th>
<th>标题</th>
<th>发布时间</th>
<th>新闻分类</th>
<th>操作</th>
</tr> <!--遍历Action方法 设置给viewdata的数据集合,生成html代码-->
@foreach (news n in ViewData["datalist"] as List<news>)
{
<tr>
<td>@n.id </td>
<td>@n.title </td>
<td>@n.createTime </td>
<td>@n.caid </td>
<td>
<a href="javascript:Del(@n.id) ">删除</a>
<a href="javascript:Modify(@n.id )">修改</a>
</td>
</tr>
}
</table>
</body>
</html>
</span>

3.

<span style="font-size:18px;">
@model MVCBlog.Models.news
@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<title>修改</title>
<style type="text/css">
#tblist {
border: 1px solid #0ff;
width: 600px;
margin: 10px auto;
border-collapse: collapse;
} #tblist th, td {
border: 1px solid #0ff;
padding: 10px;
}
</style>
</head>
<body>
@using (Html.BeginForm("Modify", "Home", FormMethod.Post))
{
<table id="tblist">
<tr>
<td colspan="">修改 @Html.HiddenFor(a => a.id)</td>
</tr>
<tr>
<td>标题:</td>
@*<td >@Html.TextBox("txtName",(object )Model.title)</td>*@
<!--使用htmlhelper的强类型方法直接从model中根据title属性生成文本框-->
<td>@Html.TextBoxFor(a => a.title)</td>
</tr>
<tr>
<td>分类:</td>
<td>@Html.DropDownListFor(a => a.category, ViewBag.CateList as IEnumerable<SelectListItem>)</td>
</tr>
<tr>
<td>内容:</td>
<td>@Html.TextAreaFor(a => a.content, , , null)</td>
</tr>
<tr>
<td colspan=""><input type="submit" value="确定修改" />@Html.ActionLink("返回", "Index", "Home")</td>
</tr>
</table>
}
</body>
</html>
</span>

第四,页面运行实现

第五,BUG   将List修改为去取两个表关联的数据,前后台的修改。

代码下载地址:             链接:https://pan.baidu.com/s/1_4NKrIqM51EPOMJLSWSB0Q
                                 提取码:wpjc

【C#】MVC+EF+LINQ 综合小项目的更多相关文章

  1. mvc ef LINQ to Entities 不识别方法“Int32 Parse(System.String)”,因此该方法无法转换为存储表达式。

    private sys_User GetUserInfo() { sys_User model = null; var userId = Convert.ToInt32(AccountHelper.G ...

  2. .NET MVC+ EF+LINQ 多表联查VIEW显示列表

    1.VIEW 页面显示代码 <link href="~/Content/bootstrap.css" rel="stylesheet" /> < ...

  3. MVC +EF+linq 多表联查

    关于linq的多表联查效果的实现: 后台多表查询  内连接: SELECT [Extent2].[partID] AS [partID], [Extent1].[userName] AS [userN ...

  4. ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK

    看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...

  5. MVC+EF+Spring.Net代码生成器

    最近研究学习了MVC.EF等相关技术,写了一套项目架构.只要更改EF模型,生成数据库并转换T4模版.数据层和业务层就可以自动生成了. 主要用到的技术: 1.EF实体框架. 2.Spring.Net依赖 ...

  6. MVC+EF三层+抽象工厂

    MVC+EF三层+抽象工厂项目搭建   注意:项目经过两次搭建,所以截图中顶级命名空间有ZHH和ZHH2区别,但是架构的内容是一样的,可以将ZHH和ZHH2视为同一命名空间 一:权限管理 二:搜索 | ...

  7. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  8. 【PHP小项目使用MVC架构】

    小项目名称是雇员管理系统. mvc是一种项目的开发模式,中文名称为模式视图控制器,是强制程序员将数据的输入.处理.输出分开的一种开发模式. 在这个小项目中,控制器使用service作为后缀名. 项目u ...

  9. Asp.net MVC + EF + Spring.Net 项目实践3

    Asp.net MVC + EF + Spring.Net 项目实践 这一篇要整合Model层和Repository层,提供一个统一的操作entity的接口层,代码下载地址(博客园上传不了10M以上的 ...

随机推荐

  1. HTML5视频直播及H5直播扫盲

    章来源:http://geek.csdn.net/news/detail/95188 分享内容简介: 目前视频直播,尤其是移动端的视频直播已经火到不行了,基本上各大互联网公司都有了自己的直播产品,所以 ...

  2. chrome瀏覽器去掉緩存的方法

    方法一: 1.開發說打開開發者工具 勾選這個訪問可以 方法二: command+shift+R

  3. mysql实战优化之六:Order by优化 sql优化、索引优化

    在MySQL中的ORDER BY有两种排序实现方式: 1.利用有序索引获取有序数据 2.文件排序 在使用explain分析查询的时候,利用有序索引获取有序数据显示Using index.而文件排序显示 ...

  4. ThreadPoolExecutor之四:jdk实现的ScheduledThreadPoolExecutor

    一.定时任务调度方式常见的有: 1.cron是一个linux下的定时执行工具,一些重要的任务的定时执行可以通过cron来实现,例如每天凌晨1点备份数据等. 2.在JAVA WEB开发中,我们也经常需要 ...

  5. JAVA 1.7并发之LinkedTransferQueue原理理解

    昨天刚看完BlockingQueue觉得好高级啊,今天扫到1.7就发现了升级版.... 如果对内容觉得不够充分,可以去看http://www.cs.rochester.edu/u/scott/pape ...

  6. 杂项-公司:摩根大通百科-un

    ylbtech-杂项-公司:摩根大通百科 摩根大通集团(JPMorgan Chase & Co,NYSE:JPM:),2000年12月由J.P.摩根公司和大通-曼哈顿公司合并而成,是美国主要的 ...

  7. mysql索引设计

    mysql索引设计 1.B树与B+树的区别?B-Tree:一个节点可以拥有大于2个子节点的平衡多叉树,所有关键字在整颗树中出现,包括在非叶子节点也能命中, 叶子节点之间没有链表B+Tree:每个叶子节 ...

  8. iOS平台下闪退原因汇总(一):"Ran out of trampolines of type 0/1/2" 运行时间错误

    "Ran out of trampolines of type 0/1/2" 运行时间错误通常出现在使用大量递归泛型时.要看到这个错误需要连接着设备直接将项目build到设备里运行 ...

  9. 【开发工具】最强Git使用总结

    目录 必读材料 常用小结 Git操作流程 Git常用操作命令 - 代码提交和同步代码 Git常用操作命令 - 代码撤销和撤销同步 Git常用操作命令 - 其它常用命令 Git是分布式代码托管的标杆,这 ...

  10. Python基础学习三 字符串

    字符串方法 slit = ['a', 'b', 'c', 'd', 'f', 'g'] s2='hhhhhhhhhh' tu = (1,2,3,4,5) d={'name':'nnn','age':1 ...