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层使用了两表,在连接上下文的时候也要创立两个
然后再dal层中写添加和显示查询分页的代码
更改web.config 数据库连接字符串
1.更改connectionString属性名 data source 值 改成"."或数据库实例名称
2.更改connectionString属性名 initial catalog 值 改成 自定义数据库名称
然后进行数据迁移
重新复习一下数据迁移的三个步骤:
1)enable-migrations:启动数据迁移(将默认创建的文件的 AutomaticMigrationsEnabled 改为 true)
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
}))
这样,我们一套基本的添加和显示的操作就完成了
最后看一下效果