正文部分会有详细介绍
上篇文章主要讲了如何配置EF, 我们回顾下主要过程:
创建Data Model ---> 创建Database Context --->创建databaseInitializer--->配置entityFramework的context配置节。
对这个过程还有疑问的可以去上篇再看一下。
本次我们就主要讲解
(1) EF根基的CRUD
(2) 涉及到的常用HtmlHelper
概述 & 要点下面是本文要点,正文部分会有详细介绍。
EF数据模型的CRUD
常用的HtmlHelper
Repository Pattern
理论根本 -- EF 三种编程方法 (略)总共有三种方法:
Database First,Model First和Code First,我们给与的是code first.
这方面资料很多,我就不反复讲述了, 需要了解这三者差异和应用场景的请自行查阅其他资料。
理论根本 -- EF CRUD针对之前创建的SysUser, SysRole, SysUserRole举一些范例例子,根基的CRUD大家在使用时仿照这些例子就可以了。
我们要用的数据库示例数据分袂如下:
SysUser
SysRole
SysUserRole
EF数据盘问先讲使用频率最高的盘问部分。
EF数据盘问用LINQ实现(LINQ to Entities),凡是有表达式和函数式两种方法。建议用函数式方法,对照简单。
假设我们已经界说好了context
private AccountContext db = new AccountContext();
[根基盘问] 盘问所有的SysUser//表达式方法
var users = from u in db.SysUsers
select u;
//函数式方法
users = db.SysUsers;
[条件盘问] 插手盘问条件users = from u in db.SysUsers
where u.UserName == "Tom"
select u; //表达式方法
users = db.SysUsers.Where(u => u.UserName == "Tom"); //函数式方法
NOTE 注意这边等号是C#写法 : " == "
[排序和分页盘问]users = (from u in db.SysUsers
orderby u.UserName
select u).Skip(0).Take(5); //表达式方法
users = db.SysUsers.OrderBy(u => u.UserName).Skip(0).Take(5); //函数式方法
NOTE 只有排序了才华分页
[聚合盘问]//查user总数
var num = db.SysUsers.Count();
//查最小ID
minId = db.SysUsers.Min(u => u.ID);
NOTE 聚合盘问只能通过函数式盘问
[连接盘问]var users = from ur in db. SysUserRoles
join u in db. SysUsers
on ur.SysUserID equals u.ID
select ur;
NOTE
大家注意,连接盘问返回的功效还是一个类型为SysUserRoles的调集,只是用了内连接进行了的筛选。
那么问题来了,如果我需要选择一个调集,里面包孕多张表,如SysUser里面的UserName和SysRole里面的RoleName怎么办?
这个是通过navigation property来实现的, 前面新建model的时候提到过,例如SysUser里面的
public virtual ICollection<SysUserRole> SysUserRoles { get; set; }
但这种做法还是不是太灵活,具体做法我们不才面的详细法式里面讲。
增补:
内连接inner join:只显示两表id匹配的
左外连接left join:显示join左边的表的所有数据(不管两表是否匹配),对付不匹配的部分都用NULL显示
右外连接right join:与左外连接相反,显示join右边的表的所有数据
UPDATE法式对照清晰,直接看下面代码。
//数据更新,分三步:找到东西--> 更新东西数据--> 生存变动
public ActionResult EFUpdateDemo()
{
//1.找到东西
var sysUser = db.SysUsers.FirstOrDefault(u => u.UserName == "Tom"); //如果不独一?
//2.更新东西数据
if (sysUser != null)
{
sysUser.UserName = "Tom2";
}
//3.生存改削
db.SaveChanges();
return View();
}
EF数据添加/删除与UPDATE类似。
//数据添加和删除
public ActionResult EFAddOrDeleteDemo()
{
//添加
//1.创建新的实体
var newSysUser = new SysUser()
{
UserName = "Scott",
Password = "tiger",
Email = "[email protected]"
};
//2.增加
db.SysUsers.Add(newSysUser);
//3.生存改削
db.SaveChanges();
//删除
//1.找到需要删除的东西
var delSysUser = db.SysUsers.FirstOrDefault(u => u.UserName == "Scott");
//2.删除
if (delSysUser!=null)
{
db.SysUsers.Remove(delSysUser);
}
//3.生存改削
db.SaveChanges();
return View("EFQueryDemo");
}
详细法式
盘问用户及相应角色的成果
改削用户
增加用户和删除用户
盘问用户及相应的角色 在Controller中改削Index要领,添加相关View, 显示所有用户
将model作为参数传过去 控制器要领传参数
Views ---> Account ---> Index.cshtml 顶部添加强类型声明,页面措置惩罚惩罚显示参数
@model IEnumerable<MVCDemo.Models.SysUser>
body中添加个table用来显示数据
NOTE
@Html.ActionLink("Details", "Details", new { id = item.ID })生成一个不异controller下的路由地点。
显示功效
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30584.html