首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

5个EF core性能优化技巧,让你程序健步如飞

1.使用 EF.Functions.xxx 进行查询 (1).使用 EF.Functions.Like进行模糊查询要比 StartsWith、Contains EndsWith 方法生成的SQL语句性能更优...模糊查询实际分别被解析成为Left、CharIndexRight,而不是Like,而EF.Functions.Like会解析成Like语句。...4、禁用实体追踪 当我们从数据库中查询出数据时,上下文就会创建实体快照,从而追踪实体。在调用 SaveChanges 时,实体有任何更改都会保存到数据库中。...但是当我们只需要查询实体而不需要修改时(只读),实体追踪就没有任何用途了。这时我们就可以调用 AsNoTracking 获取非追踪的数据,这样可以提高查询性能。...具体代码如下: var users = db.Users.AsNoTracking().ToList(); 注:如果是多表查询可以在查询前 db.ChangeTracker.QueryTrackingBehavior

2.3K50

eShopOnContainers 知多少:Catalog microservice

该微服务的核心领域实体是商品,其类图如下: ?...使用NoTracking提升查询速度 在CatalogController的构造方法中,明确指定以下代码来进行查询优化,这一点也是我们值得学习的地方。...((DbContext)context).ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; 在进行种子数据的预置时...比如: 修改产品价格时,需要同步更新购物车中保存的产品信息的价格。 下订单时,需要验证当前商品库存是否充足,进行锁库抢占,以避免库存不足导致的订单无效。...因为在微服务应用里,产品表购物篮表被各自的微服务所占有。任何微服务不应该在自己的事务中包含其他微服务的表或存储,即使是直接查询也是不可以的。

61330
您找到你想要的搜索结果了吗?
是的
没有找到

【愚公系列】2023年02月 .NETC#知识点-使用控制台手搭webapi框架

文章目录 前言 一、使用控制台手搭webapi框架 1.配置文件 2.控制台配置 二、EFCore框架DBSet配置详解 1.实体统一配置 2.实体继承统一接口 3.获取程序集所有类 4.批量注入模型类到...EF中 三、EFCore框架表配置详解 1.配置基类, 2.实体表统一配置 3.DBContext中应用配置 四、仓储配置 1.仓储基类 2.仓储实现类 五、Autofac配置 1.注入DBContext...它可以用于处理数据,访问数据库,处理图像视频,以及进行其他高级功能。...,下面着重详解 二、EFCore框架DBSet配置详解 1.实体统一配置 EF实体继承统一的接口,方便我们反射获取所有EF实体,接口可以设置一个泛型,来泛化我们的主键类型,因为可能存在不同的表的主键类型也不一样...WithMany(x => x.Books) .HasForeignKey(r => r.UserId).IsRequired(false);//导航属性,本质就是创建外键,虽然查询很方便

1.5K10

Entity Framework Core 捕获数据库变动

JsonConvert.SerializeObject(news) }; return audit; } } 这个类主要是用于存储表名称,被操作数据的主键Id,被操作前的数据被操作的数据...在上面的代码中我们看到我们将被操作数据的主键Id、被操作前的数据被操作的数据的变量都定义成了字典类型,这是因为我们的程序中有可能出现批量操作的问题。...在将上述信息转换成 Audit 时提示我们对被操作前的数据被操作的数据进行了一个长度判断,这是因为当我们新增数据的时候是没有旧数据的,当我们对数据没有进行任何更改就提交数据的时候是不存在新数据的。...三、总结 通过前面的代码示例讲解,我们就可以解答前面提出的两个问题了,除了部分数据是由数据库自动生成的情况下,大部分情况下在调用SaveChanges方法之前,我们通过上下文中的ChangeTracker...属性来获取旧值新值并保存

56110

UnitOfWork知多少

UOW模式的作用是在业务用例的操作中跟踪对象的所有更改(增加、删除更新),并将所有更改的对象保存在其维护的列表中。在业务用例的终点,通过事务,一次性提交所有更改,以确保数据的完整性有效性。...EF中的UOW 每个DbContext类型实例都有一个ChangeTracker用来跟踪记录实体的变化。当调用SaveChanges时,所有的更改将通过事务一次性提交到数据库。...这样就形成了一条链:Uow->仓储-->聚合-->实体值对象。即Uow负责管理仓储处理事务,仓储管理单一聚合,聚合又由实体值对象组成。 下面我们就先来定义实体值对象,这里我们使用层超类型。...protected virtual void AttachIfNot(TEntity entity) { var entry = _dbContext.ChangeTracker.Entries...至此,我们完成了从实体到聚合再到仓储的定义实现,万事俱备,只欠Uow。 4.5. 实现UOW 通过第3节的说明我们已经知道,EF Core已经实现了UOW模式。

2.3K81

C# 数据操作系列 - 8. EF Core的增删改查

ChangeTracker来实现对数据实体的状态更新。...3.花样查询 EF Core 支持Linq查询,所以在查询的时候可以使用Linq进行。...EF Core在调用 ToList的时候,会将已调用的方法Linq转换成SQL语句,并正式向数据库发起查询。如果出现了在Linq中调用三方方法或者自己写的工具方法的话,可能会提示不受支持。...所以,为了高效的查询,在执行查询的时候,最好使用简单的查询条件。 4. 后续 EF Core整体使用已经介绍完了,当然照例是普通工程级的内容。下一篇我给大家介绍一下EF Core剩下一些边角料,嗯。...待EF Core篇完成,将带领一起去探索 NhibernateDapper,SqlSugar这三个ORM框架

3K20

.NET Core开发实战(第30课:领域事件:提升业务内聚,实现模块解耦)--学习笔记

30 | 领域事件:提升业务内聚,实现模块解耦 我们在领域的抽象层定义了领域事件领域事件处理的接口 IDomainEvent namespace GeekTime.Domain { public...IDomainEvent : INotification { } } 这是一个空接口,它只是标记出来某一个对象是否是领域事件,INotification 也是一个空接口,它是 MediatR 框架的一个接口...Clear(); } 将领域事件做一个实体的属性存储进来,它应该是一个列表,因为在一个实体操作过程中间可能会发生多件事情,领域事件应该是可以被实体模型之外的代码读到,所以暴露一个 ReadOnly 的...DispatchDomainEventsAsync(this IMediator mediator, DbContext ctx) { var domainEntities = ctx.ChangeTracker...EntityContext 里面去跟踪我们的实体,然后从跟踪到的实体的对象中获取到我们当前的 Event,如果 Event 是存在的,就把它取出来,然后将实体内的 Event 进行清除,再然后将这些

51510

.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记

2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员助教都在项目分组中,调整模型,删除 Assistant...例如,在以下实体中,Post.Blog Blog.Posts 导航属性将被延迟加载。...lighterDbContext.Projects.ToList(); 跟踪与不跟踪 跟踪与不跟踪:https://docs.microsoft.com/zh-cn/ef/core/querying/tracking 默认情况下,跟踪返回实体类型的查询...非跟踪查询 var blogs = context.Blogs .AsNoTracking() .ToList(); 还可以在上下文实例级别更改默认跟踪行为: context.ChangeTracker.QueryTrackingBehavior...p.IsDeleted); 所有实体都继承了基类 Entity,所以这样会把过滤器添加在所有查询上面 LighterDbContext modelBuilder.Entity().HasQueryFilter

1.2K11

.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记

2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员助教都在项目分组中,调整模型,删除 Assistant...例如,在以下实体中,Post.Blog Blog.Posts 导航属性将被延迟加载。...lighterDbContext.Projects.ToList(); 跟踪与不跟踪 跟踪与不跟踪:https://docs.microsoft.com/zh-cn/ef/core/querying/tracking 默认情况下,跟踪返回实体类型的查询...非跟踪查询 var blogs = context.Blogs .AsNoTracking() .ToList(); 还可以在上下文实例级别更改默认跟踪行为: context.ChangeTracker.QueryTrackingBehavior...p.IsDeleted); 所有实体都继承了基类 Entity,所以这样会把过滤器添加在所有查询上面 LighterDbContext modelBuilder.Entity().HasQueryFilter

1.2K10

使用EF6简实现多租户的应用

关键是现实的方式必须对开发人员来说是透明的,不需要关注这个字段的信息,由后台或是封装在基类中实现数据的筛选更新。...基本原理 从新用户注册时就必须指定用户的TenantId,我的例子是用CompanyId,公司信息做为TenantId,哪些用户属于不同的公司,每个用户将来只能修改查询属于本公司的数据。...接下来就是用户登录的时候获取用户信息的时候把TenantId保存起来,asp.net mvc(不是 core) 是通过 Identity 2.0实现的认证授权,这里需要重写部分代码来实现。...最后用户对数据查询/修改/新增时把用户信息中TenantId,这里就需要设定一个Filter(过滤器)每次SaveChange的插入TenantId 如何实现 第一步,扩展 Asp.net Identity...this.AddErrors(ex); 51 52 return this.View(viewModel); 53 } 54 } 第三步 读取登录用户的TenantId 在用户查询新增修改时把

98810

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

Scrapy,Python开发的一个快速,高层次的屏幕抓取web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测 自动化测试 。...Scrapy主要包括了以下组件: 引擎(Scrapy) 用来处理整个系统的数据处理, 触发事务(框架核心) 调度器(Scheduler) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回...当页面被爬虫解析,将被发送到项目管道,并经过几个特定的次序处理数据。...爬虫中间件(Spider Middlewares) 介于Scrapy引擎爬虫之间的框架,主要工作是处理蜘蛛的响应输入请求输出。...注:urllib.urlretrieve(ab_src, file_path) ,接收文件路径需要保存的路径,会自动去文件路径下载并保存到我们指定的本地路径。

2K110

分分钟学会用python爬取心目中的女神——Scrapy

Scrapy主要包括了以下组件: 引擎(Scrapy) 用来处理整个系统的数据处理, 触发事务(框架核心) 调度器(Scheduler) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回...当页面被爬虫解析,将被发送到项目管道,并经过几个特定的次序处理数据。...爬虫中间件(Spider Middlewares) 介于Scrapy引擎爬虫之间的框架,主要工作是处理蜘蛛的响应输入请求输出。...注:urllib.urlretrieve(ab_src, file_path) ,接收文件路径需要保存的路径,会自动去文件路径下载并保存到我们指定的本地路径。...上述代码中多个类的目的是,可以同时保存在文件和数据库中,保存的优先级可以在配置文件settings中定义。 ? 总结:本文对python爬虫框架Scrapy做了详细分析实例讲解。

1.2K30

DDD-如何集成限界上下文应用服务的使用

典型框架有Struts、SpringMVCWeb Flow、ASP.NET等。...此时,我们可以在资源库中创建一些查询方法,这些方法返回的是所有聚合实例属性的超集。查询方法动态地将查询结果放在一个值对象(6)中,该值对象是特别为当前用例设计的。...多数基于Java的Web框架都要求对象提供公有的getter方法,比如getSummary()getStory()等,但是对领域模型的设计却倾向于使用流畅的、特定于领域的表达式来反映通用语言(1)。...此时,我们将使用summary()story()这样的方法命名,这便与用户界面框架产生了阻抗失配。...应用服务负责用例的任务协调,每个用例对应了一个服务方法。在使用ACID数据库时,应用服务还负责控制事务以确保对模型修改的原子提交。另外,应用服务还会处理安全相关的操作。

1.5K00

使用LagomJava构建反应式微服务系统

通过内置支持具有命令查询责任分离(CQRS)的事件溯源(ES),Lagom倾向于以数据持久性为基础的事件源架构。持续实体是Lagom实施事件溯源。...服务位置,通信协议和其他问题由Lagom透明处理,最大限度地提高了方便性生产力。 Lagom支持事件溯源CQRS(命令查询责任隔离)的持久性。...提供服务的实现,我们现在可以使用Lagom框架进行注册。 Lagom建立在Play框架之上,因此使用Play的基于Guice的依赖注入支持来注册组件。要注册一个服务,你需要实现一个Guice模块。...持久实体也是事务边界。不变量可以保持在一个实体内,但不能跨越多个实体。 Lagom将事件保留在数据库中。事件处理器,其他服务或客户端读取并可选地对存储的事件进行操作。...实体将自动分布在服务集群中的节点之间。每个实体只在一个地方运行,并且消息可以被发送到实体,而不要求发送者知道实体的位置。一个实体保持活着,只要它被使用就将其当前的状态保存在内存中。

1.9K50

EntityFramework系列:MySql的RowVersion

无需修改实体配置,在MySql中使用SqlServer一致的并发控制。修改RowVersion类型不可取,修改为Timestamp更不可行。...在EF中采用IsConcurrencyToken配置RowVersion即自动用于where子句中用于比较Row Version,通过重写SaveChanges方法在每次添加更新时设置RowVersion...的值即可实现在更新时同时比较Row Version的当前版本更新Row Version的目的,同时可以正确的取回更新的Row Version值。...MySqlDbInitializer()); } 3.手动对RowVersion赋值 public override int SaveChanges() { this.ChangeTracker.DetectChanges...2.需要设置Insert时的RowVersion默认值更新RowVersion版本号,Sql Server(Compact)本身支持,MySql只支持不能用于RowVersion的TimeStamp的默认值自动更新

1.2K10
领券