这是第一次写博客,只是将自己所学到的东西写下来,写的不好请见谅
使用环境:
VS2015+EF6+SQL Server LocalDB(VS2015自带数据库)
创建一个MVC应用程序
选择一个空的项目,记得勾上MVC,不进行身份验证,把右边的勾取消
编写模型类
因为我是打算做一个迷你的用户管理CRUD系统,所以需要创建一个User类,在解决方案资源管理器的Models文件夹下,右击新建类,创建名为User的类,id上面修饰的Key,是为了接下来通过映射直接生成数据库中表方便一些,key代表主键
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace MVC5_CRUD.Models
{
public class User
{
[Key]
public int id { get; set; }
public string userName { get; set; }
public string passWord { get; set; }
}
}
创建数据库
打开SQL Server对象资源管理器,应该有一个名为MSSQLLocalDB的SQL server,右击数据库新建一个数据库,我新建的名字为MVC5_DB
安装EF6插件
安装这个插件是为了简单的访问数据库进行CRUD
新建与数据库映射的类
在项目下新建一个DB文件夹,新建一个DbContexts的类,添加下面的代码
using MVC5_CRUD.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace MVC5_CRUD.DB
{
public class DbContexts:DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().ToTable("User");
//第一个User为引用的类,第二个User为表名
base.OnModelCreating(modelBuilder);
}
public DbSet<User> Users { get; set; }
}
}
配置 DbContext
在Web.config中配置与数据库的连接,是根目录下的Web.config,不是Views里面的
<connectionStrings>
<add name="DbContexts" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=MVC5_DB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient" />
</connectionStrings>
name为之前在DB文件夹创建的类的名字,connectionString可以直接从数据库的详细中获取,选中数据库,右下角有详细的属性,找到连接字符串那一行,将value复制到connectionString即可
新建控制器
新建一个HomeController.cs的控制器,在对应的文件夹中新建
using MVC5_CRUD.DB;
using MVC5_CRUD.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVC5_CRUD.Controllers
{
public class HomeController : Controller
{
DbContexts db = new DbContexts();
// GET: Home
public ViewResult Index()
{
List<User> userList = db.Users.ToList();
return View(userList);
}
}
}
然后按F5,启动项目,会报错,没事,停止项目,可以打开数据库看看,User表自动生成了
打开表,填写一两行数据,之后要用
创建视图
在控制器中的Index方法名上,右击添加视图,新建的是强类型视图
Index.cshtml内容
@using MVC5_CRUD.Models
@model List<User>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>用户名</th>
<th>密码</th>
<th>操作</th>
</tr>
</thead>
<tbody>
@foreach (User item in Model)
{
<tr>
<td>@item.id</td>
<td>@item.userName</td>
<td>@item.passWord</td>
<td><a href="#">编辑</a> | <a href="#">删除</a></td>
</tr>
}
</tbody>
</table>
</div>
</body>
</html>
启动项目,已经读取到之前填入数据库里面的信息了
实现增加功能
在控制器中添加新的方法
[HttpGet]
public ViewResult insert()
{
return View();
}
创建一个视图
insert.cshtml视图中写出一个form表单,将username和password通过提交按钮再次传到insert控制器中
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>insert</title>
</head>
<body>
<div>
<form action="/Home/insert" method="post">
userName:<input type="text" name="userName" /><br />
passWord:<input type="text" name="passWord" /><br />
<input type="submit" value="提交" />
</form>
</div>
</body>
</html>
回到控制器中,完善提交按钮之后的数据处理,往下再写一个方法
[HttpPost]
public ActionResult insert(User user)
{
db.Users.Add(user);
db.SaveChanges();
return RedirectToAction("Index");
}
该方法实现了增加操作
实现编辑/修改功能
首先要实现表格中的编辑按下去,调到update页面,同时带上id,将该user的内容填充的文本框中(查询功能),之后,要实现点击修改按钮,对数据库相应数据进行修改(修改功能),最后自动返回主页Index
先实现跳转到update页面的操作
<a href="/Home/update/@item.id">编辑</a> 实现首页编辑按钮跳转带id
控制器添加
[HttpGet]
public ViewResult update(int id)
{
User user = db.Users.Find(id);
return View(user);
}
视图为强类型视图
@model MVC5_CRUD.Models.User
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>update</title>
</head>
<body>
<div>
<form action="/Home/update" method="post">
<input type="hidden" id="id" name="id" value="@Model.id" />
userName:<input type="text" name="userName" value="@Model.userName"/><br />
passWord:<input type="text" name="passWord" value="@Model.passWord"/><br />
<input type="submit" value="修改" />
</form>
</div>
</body>
</html>
接下来实现update功能——修改按钮
控制器中添加下面这段方法,即可实现update功能,这里使用的取巧的方式,两个方法通用为update,但是通过传递的方式的不同,一个是get、一个是post,浏览器才可以区分出什么时候调用哪一个update
[HttpPost]
public ActionResult update(User user)
{
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
实现删除功能
实现这个功能,其实和修改中查询模块类似,在控制器添加delete方法
[HttpGet]
public ActionResult delete(int id)
{
User user = db.Users.Find(id);
db.Users.Remove(user);
db.SaveChanges();
return RedirectToAction("Index");
}
表格中的a链接为
<a href="/Home/delete/@item.id">删除</a>