当前位置:首页 > Web开发 > 正文

正文部分会有详细介绍

2024-03-31 Web开发

上篇文章主要讲了如何配置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 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右边的表的所有数据

EF数据更新

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