EFCore主要是通过Linq这个方式查询数据库
1、查询所有数据
把Leagues里的所有数据查询出来
第一种形式
通过Linq方法.ToList(),EFCore遇到ToList()语句就会执行SQL查询,如果不加过滤条件的话就是把表里的所有数据查询出来
第二种形式
通过Linq查询表达式,查询结果与Linq方法是一样的
[HttpGet]
public IActionResult GetLeague() {
//第一种形式 通过Linq方法
var leagues = _dbContext.Leagues.ToList();
//第二种形式 通过Linq查询表达式
var league2 = (from lg in _dbContext.Leagues select lg).ToList();
return Ok(leagues);
不加过滤条件查询所有数据没有什么意义
需要加一些查询条件,查询条件怎么加呢?
第一种写法
在后面加一个Where()方法,里面的参数是一个Lambda表达式
第二种写法
在后面加where语句,这与sql语句有点类似
[HttpGet]
public IActionResult GetLeague()
//第一种
var leagues = _dbContext.Leagues
.Where(l => l.Country == "中国")//查询条件
.ToList();//只有执行ToList()方法才真正执行数据库查询
//第二种
var league2 = (from lg in _dbContext.Leagues
where lg.Country == "中国"//查询条件
select lg).ToList();
return Ok(leagues);
通常在开发过程中都是使用第一种方法
延迟执行
在.ToList()方法之前都是返回IQueryable类型
IQueryable就是C#中Linq To SQL语句的返回类型,简单来说IQueryable就是可以叠加处理SQL语句,最后统一访问数据库,这个处理过程就叫延迟执行,这一步只是生成了SQL语句,并没有真正执行数据库查询
只有执行ToList()方法才真正执行数据库查询,这个ToList()方法之前都是可以多次叠加Where()方法
那么在什么情况下会执行数据库查询呢?
ToList()、First()、FirstOrDefault()
Single()、SingleOrDefault()、Last()、LastOrDefault()//Single只能是一个数据
Count()、LongCount()、Min()、Max()、Average()、Sum()
Find()、 foreach()
还有异步版本:ToListAsync()、FirstAsync()
First返回符合添加的第一条数据;First与FirstOrDefault的区别,First必须有数据,否则会报错,FirstOrDefault可有可无
foreach循环:遇到foreach语句EFCore会把数据库连接打开,然后连接一直处于开放状态,一直保持连接,直至foreach循环结束才关闭数据库连接,如果循环里执行比较耗时,可能就会出现一些异常或数据冲突,尽量不要这样写;应该先通过ToList(),然后对ToList的结果进行循环。
First()与FirstOrDefault()可以在方法参数里直接写Where查询条件
_dbContext.Leagues.FirstOrDefault(w => w.Country == "中国");
如果在代码中把查询条件写死了,生成的SQL语句也是写死的。如果把查询条件提取为变量,生成SQL语句就会使用参数类型


模糊查询
比如需要模糊sql查询条件
SELECT * FROM Leagues WHERE Country LIKE N'%中%'
//第一种 模糊查询
var leagues = _dbContext.Leagues
.Where(l => l.Country.Contains("中"))//查询条件
.ToList();
//第二种 模糊查询
var league_ef = _dbContext.Leagues
.Where(l => EF.Functions.Like(l.Country, "中%"))
.ToList();
2、查询单个数据
[HttpGet]
public IActionResult GetSingleLeague()
var _id = new Guid("4227506D-05E4-47A2-B94F-08D8451D5DC0");
//第一种
var leagues = _dbContext.Leagues.SingleOrDefault(l => l.Id == _id);
//第二种
var league2 = _dbContext.Leagues.Find(_id);
return Ok(new { leagues, league2 });


根据执行情况来看,请求得到两个相同的对象leagues和league2,但是只执行了一条SQL语句。
因为第一种查询的时候生成了查询SQL语句,查询出来的数据被context进行追踪,如果使用DbSet<>()上的Find()方法执行查询,如果context追踪内存中能找到这条数据,就不用进行数据库查询,直接从内存中读取数据返回
如果把【第一种】和【第二种】两种方法返过来查询就会执行两次数据库查询操作。
如果想使用Last()方法查询语句,必须排序操作:正序.OrderBy(x=>x.Id),倒序.OrderByDescending(x=>x.Id)
EFCore主要是通过Linq这个方式查询数据库1、查询所有数据把Leagues里的所有数据查询出来第一种形式通过Linq方法.ToList(),EFCore遇到ToList()语句就会执行SQL查询,如果不加过滤条件的话就是把表里的所有数据查询出来第二种形式通过Linq查询表达式,查询结果与Linq方法是一样的[HttpGet]public IActionResult GetLeague() { //第一种形式 通过Linq方法 var leagues = _dbCon
目录以太网协议--局域网中工作局域网的争用问题解决局域网的争用问题--交换机以太网帧格式跨网络传输认识MAC地址对比理解IP与MAC地址ARP协议ARP协议格式ARP协议作用ARP请求与ARP应答ARP请求ARP 应答查看ARP 和MAC地址对应的映射关系DNS(域名解析)ICMP--工作在网络层的协议ping命令有端口号吗?
以太网协议–局域网中工作
局域网的争用问题
碰撞域:因为以太网同一时刻只允许一个人进行网络通信,所以整个局域网可视为一个碰撞域。
详细看这个
解决局域网的争用问题–交换机
获取数据访问连接IDbConnection dbConnection
通过扩展方法GetDBExtend获取IAbsDBExtend对象
public IAbsDBExtend GetDBExtend()
return dbConnection.GetDBExtend(dbTrans);
使用IAbsDBExten
文章目录1、操作DBContext类的对象,实现SQL语句的执行=>创建表2、实现数据的添加操作3、实现数据的更新4、实现数据的删除总结:一个接口+一个实现注意
1、操作DBContext类的对象,实现SQL语句的执行=>创建表
using (MyDatabaseEntities db = new MyDatabaseEntities())
// ExecuteSqlCommand()方法:用于执行数据的增删改,以及创建表、删除表操
你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题
12-16
Entity Framework Core就是一个ORM,什么是ORM?EntityFramework Core能把C#里的类映射到数据库里的表,然后属性就映射到字段上。
Entity Framework Core 3.1 是微软长期支持版本,3.1是一个长期支持的版本,而且从EFcore3.0开始是向后开辟了一个新时代。因为3.0和2.0之间的差异还是比较大,所以学3.1是一个比较好的选择。在2020年底NET5出来之后,也应该出来一个相应的版本,但是跟这个3.1差别应该不会太大。
首先建三个Model.
Entity Framework Core中的查询
Entity Framework Core中的查询与EF 6.x中的查询相同,但具有更优化的SQL查询,并且能够将C#/ VB.NET函数包含在LINQ到实体查询中。
Entity Framework Core 允许你在模型中使用导航属性来加载相关实体。 有三种常见的 O/RM 模式可用于加载关联数据:
Eager loading (预先加载)...
在开发中,我们想在调试中查看
EF Core执行的sql语句,可以使用SQL Studio Manager Tools工具,另一种方式是使用
EF Core提供的日志。
在ASP.NET
Core使用
Entity Framework Core的日志的步骤:
1. 设置启动方式
在launchSettings.json中删除IIS节点,使程序以控制台应用启动。
2. 在Programm.cs配置日志
An exception occurred in the database while saving changes for context type 'blog_file_api.Services.BlogDB'. Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.报错意味着什么