EF简单的增删改查(两表)

EF简单的增删改查(两表)

同昨天写的一样,就是在显示的过程中加了一项分页


Model层

 

使用了两表联查,所以我们要建立两个表,并分别建立两个表的主键,使之进行引用

在类中添加特性,添加特性之前需要引用命名空间

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

1.类的上边 [Table("表名称")]  2.主键 [Key]

 [Table("Student")]
  public class Student
  {
      /// <summary>
      /// 主键Id
      /// </summary>
      [Key]
      public int SId { get; set; }
      /// <summary>
      /// 姓名
      /// </summary>
      public string SName { get; set; }
      /// <summary>
      /// 年龄
      /// </summary>
      public int Age { get; set; }
      /// <summary>
      /// 性别
      /// </summary>
      public bool Sex { get; set; }
      /// <summary>
      /// 爱好
      /// </summary>
      public string Hobby { get; set; }
      /// <summary>
      /// 日期
      /// </summary>
      public DateTime Created { get; set; } = DateTime.Now; //默认值为当前日期
      /// <summary>
      /// 外键
      /// </summary>
      [ForeignKey("NClass")]//外键关键字
      public int NId { get; set; }
?
      /// <summary>
      /// 导航属性(可以根据当前学生导航到此学生所在的班级)
      /// </summary>
      public NClass NClass { get; set; }
  }
 [Table("NClass")]
  public class NClass
  {
      /// <summary>
      /// 主键ID
      /// </summary>
      [Key]
      public int NId { get; set; }
      /// <summary>
      /// 班级名称
      /// </summary>
      [StringLength(50)]
      public string NName { get; set; }
  }

 

 

 

 

 

DAL层

今天主要写了分页查询显示以及添加,同之前一样,先在DAL层创建一个空Code First模型连接上下文,model层使用了两表,在连接上下文的时候也要创立两个

EF简单的增删改查(两表)

 

 

然后再dal层中写添加和显示查询分页的代码

EF简单的增删改查(两表)

 

 

更改web.config 数据库连接字符串

1.更改connectionString属性名 data source 值 改成"."或数据库实例名称

2.更改connectionString属性名 initial catalog 值 改成 自定义数据库名称

然后进行数据迁移

重新复习一下数据迁移的三个步骤:

1)enable-migrations:启动数据迁移(将默认创建的文件的 AutomaticMigrationsEnabled 改为 true)

EF简单的增删改查(两表)

2)add-migration init(inti 可以任意命名):添加数据迁移版本的名称

3)update-database: 完成更数据库 迁移操作

控制器

在控制器中对DAL层进行调用,实例化之后才可进行操作,与之前学习的前台代码相同

StudentDal dal = new StudentDal();
      // GET: Student
      /// <summary>
      /// 添加页面
      /// </summary>
      /// <returns></returns>
      public ActionResult AddStudentIndex()
      {
          Xiala();
          return View();
      }
      public void Xiala()
      {
          ViewBag.NId = new SelectList(dal.LoadClass(), "NId", "NName");
      }
      /// <summary>
      /// 添加
      /// </summary>
      /// <param name="stu"></param>
      /// <returns></returns>
      [HttpPost]
      public ActionResult AddStudentList(Student stu)
      {
          //通过 请求
          //Request 请求
          //Response 响应
          //通讯协议是Http协议的底层是(tcp/ip) 网络层 标准七层
?
          //键 值对
          //Dictionary 字典
          //Dictionary<string, string> dict = new Dictionary<string, string>();
          //dict.Add("name", "张珊");
          //dict.Add("age", "19");
          //var name = dict["name"];
?
          //get 请求 post 请求的区别
?
          stu.Hobby = Request["Hobby"];//复选框
          if (dal.Add(stu) > 0)
          {
              return Content("<script>alert(‘添加成功‘)</script>");
          }
          else
          {
              return Content("<script>alert(‘添加失败‘)</script>");
          }
      }
      /// <summary>
      /// 显示视图
      /// </summary>
      /// <returns></returns>
      public ActionResult PageShowStudent(string SName, int? NId, int pageindex = 1, int pagesize = 3)
      {
          Xiala();
          int totalcount;
          int totalpage;
          var list = dal.pageShow(out totalcount, out totalpage, SName, NId, pageindex, pagesize);
          var lilist = new StaticPagedList<Student>(list, pageindex, pagesize, totalcount);
          return View(lilist);
      }

视图

创建添加以及显示的视图,并进行数据关联

添加:

@model CodeFirstUnit02.Models.Student
@{
  ViewBag.Title = "AddStudentIndex";
}
?
<h2>AddStudentIndex</h2>
<form action="AddStudentList" method="post">
  <table class="table table-bordered">
      <tr>
          <td>姓名</td>
          <td>
              @Html.TextBoxFor(a => a.SName)
          </td>
      </tr>
      <tr>
          <td>年龄</td>
          <td>
              @Html.TextBoxFor(a => a.Age)
          </td>
      </tr>
      <tr>
          <td>性别</td>
          <td>
              @Html.RadioButtonFor(a => a.Sex, true, new { @checked = "checked" })男
              @Html.RadioButtonFor(a => a.Sex, false)女
          </td>
      </tr>
      <tr>
          <td>爱好</td>
          <td>
              <input name="Hobby" type="checkbox" value="游泳" />游泳
              <input name="Hobby" type="checkbox" value="读书" />读书
              <input name="Hobby" type="checkbox" value="音乐" />音乐
              <input name="Hobby" type="checkbox" value="跑步" />跑步
              <input name="Hobby" type="checkbox" value="编程" />编程
          </td>
      </tr>
      <tr>
          <td>班级</td>
          <td>
              @Html.DropDownListFor(a => a.NId, (SelectList)ViewBag.NId)
          </td>
      </tr>
      <tr>
          <td colspan="2">
              <input name="name" type="submit" value="保存" class="btn btn-default" />
          </td>
      </tr>
  </table>
</form>
?
?

显示:

@using PagedList;
@using PagedList.Mvc;
@model StaticPagedList<CodeFirstUnit02.Models.Student>
?
@{
  ViewBag.Title = "GetAllList";
}
?
<h2>GetAllList</h2>
<form>
  姓名:@Html.TextBox("SName")
  班级:@Html.DropDownList("NId", (SelectList)ViewBag.NId, "请选择")
  <input type="submit" value="查询" />
</form>
?
<table class="table table-striped">
  <thead>
      <tr>
          <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.Age</td>
              <td>@(item.Sex==true?"男":"女")</td>
              <td>@item.Hobby</td>
              <td>@item.Created</td>
              <td>@item.NClass.NName</td>
          </tr>
      }
?
  </tbody>
</table>
@Html.PagedListPager(Model,pageindex=>Url.Action("pageShowStudent", new
{
  SName = Request["SName"],
  NId = Request["NId"],
  pageindex,
  pagesize=3
}))

这样,我们一套基本的添加和显示的操作就完成了

最后看一下效果

EF简单的增删改查(两表)

 

 EF简单的增删改查(两表)

 

 

 

EF简单的增删改查(两表)

上一篇:Oracle EBS中有关Form的触发器的执行顺序


下一篇:1083是否存在相等的差