EF Code First 强类型分页显示和删除

一、新建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="尾页"
})

 

八、效果演示EF  Code First  强类型分页显示和删除

 

上一篇:EF-数据迁移、删除以及分页查询显示


下一篇:EF Code First 基本操作