一、新建Models 中实体类
在类中添加特性,添加特性之前需要引用命名空间
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
添加外键导航:[ForeignKey("导航属性名")]
导航属性 :可以根据当前学生导航到所在的班级;他的类型是主表的类名
[Table("Student")]
public class Student
{
[Key]
public int SId { get; set; }
public string SName { get; set; }
public bool Sex { get; set; }
public DateTime Birthday { get; set; }
[ForeignKey("XName")]
public int XId { get; set; }
public string Email { get; set; }
public string Hobby { get; set; }
public string Addr { get; set; }
public School XName { get; set; }
}
二、新建Dal文件夹
1、右键-》新建项-》左边点数据,右边点 ADO.NET 实体数据模型-》选择空Code First 模型
2、在实体数据模型当中 添加 数据集属性
public DbSet<Model实体类> 属性名 { get; set; }--格式
public DbSet<Student> Students { get; set; }--学生
public DbSet<School> Schools { get; set; }--校区
三、更改web.config 数据库连接字符串
1、更改connectionString属性名 data source 值 改成 .或数据库实例名称
2、更改connectionString属性名 initial catalog 值 改成 自定义数据库名称
例如:
<connectionStrings>
<add name="StudentDbContext" connectionString="data source=.;initial catalog=ZY715DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
四、完成数据迁移命令-》菜单点-》工具-》NuGet包管理器->程序包管理器控制台
1、Enable-Migrations 启动迁移(将自动生成的Configuration文件中 AutomaticMigrationsEnabled =true)允许自动迁移
2、add-Migration init (init 名称自定义)
3、update-database 完成更数据库 迁移操作
五、在Dal层中将上下文实例化=》创建显示分页方法,绑定下拉框和删除方法
//实例化上下文
StudentDbContext db = new StudentDbContext();
(1)分页显示
1、在方法中写入参数和查询所需要的字段
2、在方法中定义一个扩展方法IQueryable<类名> 方法名 并给他赋值
3、判断查询条件是否存在
4、计算总条数和总页数
5、返回给数据排序后的数据并转化为数据集
/// <summary>
/// 分页显示查询
/// </summary>
/// <param name="totalcount"></param>
/// <param name="totalpage"></param>
/// <param name="sname"></param>
/// <param name="nid"></param>
/// <param name="pageindex"></param>
/// <param name="pagesize"></param>
/// <returns></returns>
public List<Student> PageShow(out int totalcount, out int totalpage,string sname ,int? nid,int pageindex=1,int pagesize = 3)
{
//ToList 只要.ToList 就必须查询数据库
//select * from studetn where 1=1
//I 开头的全代表接口 Include = join
IQueryable<Student> query = db.Students.Include("NClass");
//判断学生姓名非空
if (!string.IsNullOrEmpty(sname))
{
//Contains 包含
query = query.Where(u => u.SName.Contains(sname));
}
//判断班级
if (nid!=null)
{
query = query.Where(u => u.NId == nid);
}
totalcount = query.Count(); //总条数
totalpage = Convert.ToInt32(Math.Ceiling(totalcount * 1.0 / pagesize)); //总页数
//offset 偏移量 (跳过多少条)
//分页之前必须排序 Skip 跳过多少条 Take 显示多少条
return query.OrderBy(u => u.SId).Skip((pageindex - 1) * pagesize).Take(pagesize).ToList();
}
(2)绑定下拉框
在方法中直接返回校区数据集
public List<School> Bind()
{
return db.Schools.ToList();
}
(3)删除
1、在删除方法中传入一个参数(id)
2、先通过id 进行查询 实体
3、再删除 (更改状态)
4、操作数据库
public int Delete(int id)
{
var del= db.Students.Find(id);
db.Students.Remove(del);
return db.SaveChanges();
}
六、新建一个控制器=》右键Controllers添加=》控制器=》更改控制器名称
(1)分页显示
1、在控制器中实例化Dal层中的实体类
2、创建两个方法,一个用来分页显示,一个用来删除
3、右键引用=》管理NuGet程序包=》浏览=》搜索=》PagedList.Mvc=》安装
4、在分页显示方法中传入参数,定义总条数,总页数并赋值为0
5、调用Dal层中的分页显示方法并传入参数
6、new一下分页控件并返回
注:在分页显示中使用ViewBag绑定下拉框
(别忘了给当前页和页码赋值哦!)
public ActionResult PageShowStudent(string sname,int? nid,int pageindex =1,int pagesize =3)
{
ViewBag.xid = new SelectList(dal.Bind(), "XId", "XName");
int totalcount;
int totalpage;
var query = dal.PageShow(out totalcount, out totalpage,sname,nid,pageindex, pagesize);
var list = new StaticPagedList<Student>(query, pageindex, pagesize, totalcount);
return View(list);
}
(2)删除
1、在删除方法中传入参数(id)
2、接收Dal层中的方法及id
3、返回到视图
public ActionResult Delete(int id)
{
dal.Delete(id);
return Redirect("/Student/Index");
}
七、创建视图
1、引用命名空间和分页数据集
@using PagedList;
@using PagedList.Mvc;
@using ZY715.Models;
@model StaticPagedList<Student>
2、在form表单中写入查询的条件并提交
<form>
姓名:@Html.TextBox("name")
校区:@Html.DropDownList("xid")
<input type="submit" value="查询"/>
</form>
3、创建一个table并添加类型,正确输入表头表身,使用foreach循环输出
4、正确传输删除的id
<table class="table table-bordered">
<thead>
<tr>
<td>姓名</td>
<td>性别</td>
<td>生日</td>
<td>校区</td>
<td>邮箱</td>
<td>爱好</td>
<td>籍贯</td>
<td>操作</td>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.SName</td>
<td>@(item.Sex==true?"男":"女")</td>
<td>@item.Birthday</td>
<td>@item.XName.XName</td>
<td>@item.Email</td>
<td>@item.Hobby</td>
<td>@item.Addr</td>
<td><a onclick="return confirm('确定删除吗?')" href="/Student/Delete/@item.SId">删除</a></td>
</tr>
}
</tbody>
</table>
5、分页
@Html.PagedListPager(Model, pageindex => Url.Action("Index", new
{
pageindex,
name=Request["name"],
xid=Request["xid"]
}),new PagedListRenderOptions
{
LinkToFirstPageFormat="首页",
LinkToPreviousPageFormat="上一页",
LinkToNextPageFormat="下一页",
LinkToLastPageFormat="尾页"
})
八、效果演示