状态跟踪和Cache一、状态跟踪是什么?二、测试步骤1.实体各种状态变化2.Attach后实体状态变化3.Attach后,Find后实体状态变化4.AsNoTracking使用三、性能提升点1.Cache使用2.按需更新四、源码下载总结
一、状态跟踪是什么?
要提交到数据库中的对象和
DB
Context
对象存在某种关系:对象是否给
Context
跟踪;
一次SaveChanges 就把在
DB
Context
中的所有操作都提交到数据库中去了,SaveChange就是以
Context
为维度的。官方对实体的各种状态变
自ASP.NET诞生以来,微软提供了不少控制并发的方法,在了解这些控制并发的方法前,我们先来简单介绍下并发!
并发:同一时间或者同一时刻多个访问者同时访问某一更新操作时,会产生并发!
针对并发的处理,又分为悲观并发处理和乐观并发处理
所谓悲观/乐观并发处理,可以这样理解:
悲观者认为:在程序的运行过程中,并发很容易发生滴,因此,悲观者提出了他们的处理模式:在我执行一个方法时...
//4 放弃子表查询,又去显示获取某个数据
//主流选择会去导航,内置的方便;innor join也能完成
using (JD
Db
Context
context
= new JD
Db
Context
())
context
.Database.L...
首先定义一个
Db
Context
的扩展类
Db
Context
DetachAllExtension,其中包含一个
Db
Context
的扩展方法DetachAll,用来取消跟踪
Db
Context
中所有被跟踪的实体:
using Microsoft.EntityFrameworkCore;
using System.Linq;
namespace
Db
Context
Utils
基本优化方式:
1.避免使用大的数据库事务,尽量控制在有需求是打开,不
需要
是及时关闭,因为会锁定资源
2.批量插入表数据,尽量避免在统一
DB
Context
下做多次SavceChange操作
3.若有大批数据
需要
插入表,尽量采用单表集中插入后再操作后续集,避免插入一条数据savaChange一次
4.读取数据尽量按批量读取,避免取得一条数据读取一次
查询100次单条记录与一次性查询100条记录是有很大差别的
LInq的真假分页
query.ToList().Skip((PageIndex - 1).
首先,在起初没有使用仓储模式时,本人在使用
EF
上下文基本都用了using标记,随时使用随时
释放
,如下所示:
using(
db
context
con = new
db
context
()){
con.xxx......;
我们大家哦度知道,
EF
查询跟踪是存在数据缓存的,如果随时
释放
将无法利用缓存带来的查询速度提升。
同样,
EF
缓存也面临查询出现脏数据的
问题
,各有利弊。
EF
是默认开启数据查询缓...
《
EF
Core》实际上已经可以告一段落了,但是感觉还有一点点意犹未尽。所以决定分享一下,个人在实际开发中使用
EF
Core的一些经验和使用的扩展包。
1.
EF
Core的异步操作
正如这小节题目所言,
EF
Core是支持异步操作的,但实际可用集中在SaveChanges和异步查询这两个方法上。
具体方法声明如下:
public virtual System.Threading.Tas...
基于上篇文章《HiBlogs》重写笔记[1]--从
Db
Context
到依赖注入再到自动注入园友 @Flaming丶淡蓝@ 吴瑞祥 提出了讨论和质疑,吓得我连夜查询资料(玩笑~)。
本来重点是想分析“自动注入”和对“注入”有更深的理解。不过既然有疑问和讨论那也是很好的。总比时不时来篇“这个不行”“那个要死了”的好。
之所以没有在评论区马上回复,是因为我确实不懂。所以下班后赶紧查阅相关资料。
我个人得...
asp.net core 3.1
EF
Core 属性配置与迁移数据库
Entity Framework (
EF
) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。用于程序中的class类和数据库中的表互相之间建立映射关系。
EF
Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点:
使 .NET 开发人员能够使用 .NET 对象处理数据库。
无需再像通常那样编写大部分数据访问代码。
EF
Core 支持多个数据库引擎,可通过名为数据库提供
Db
Context
.FindAsync 方法是 Entity Framework Core 中的一个方法,它用于从数据库中查询单个实体。
FindAsync 方法接受一个主键参数,返回与给定主键相关联的实体。如果找不到匹配的实体,则返回 null。
例如,假设你有一个 Customer 实体,它有一个名为 "Id" 的主键字段。你可以使用以下代码来查询主键为 1 的客户:
using (var
context
= new My
Db
Context
())
var customer = await
context
.Customers.FindAsync(1);
FindAsync 方法是异步的,因此你必须在调用它时使用 await 关键字。
注意:FindAsync 方法仅适用于主键值类型(例如 int、long 等)。如果你的主键是字符串或其他类型,则应使用
Db
Set.FirstOrD
ef
aultAsync 方法来查询单个实体。