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

03-EF Core笔记之查询数据

EF Core还提供了不使用代理的方式进行延迟加载,此方法需要向实体类中注入ILazyLoader实例,并通过该实例实现get访问: public class Blog { private ICollection...默认情况下,EF Core跟踪查询返回的实体,如果我们不需要跟踪查询返回的实体,则可以通过AsNoTracking方法禁用跟踪。...BloggingContext()) { var blogs = context.Blogs .AsNoTracking() .ToList(); } 或者在DbContext级别禁用跟踪...,则会对实体类型执行跟踪,例如下面的查询,将会对Blog和Post进行跟踪: using (var context = new BloggingContext()) { var blog = context.Blogs...在执行查询时,EF Core会检查我们的sql语句是否支持拼接,如果支持的情况下,则会将linq过滤语句拼接为sql一并发送到数据库进行查询。 跟踪 原始SQL中的跟踪与Linq查询的跟踪方式一致。

2.4K20

Entity Framework 简单增删改操作

此外,在含有导航属性时,将一个对象赋值给另一个对象的导航属性也能达到添加的效果(当导航属性为”DbSet“集合时通过调用导航属性的“Add()“方法也同样可以达到添加效果)。...状态跟踪  在这里我们需要强调一点那就是状态跟踪,对于上面的操作如果我们调用“Attach()”方法对实体进行跟踪或者设置实体的状态那么数据将不会保存到数据库: ?...使用”Attach()”方法进行实体跟踪时会设置实体的状态为“Unchanged”此时实体处于未修改状态,当执行“SaveChange()”方法时EF不会执行修改操作。...相反如果此时设置实体状态为“Modified”则EF执行更新操作。那么既然EF的数据修改操作(增加、更新、删除)是根据实体状态而进行的,那么为什么之前我们的增加操作能正常进行而不用手动修改其状态呢?...当然,并不是所有的时候我们都需要EF自动发现状态改变,设置 “DbContext.Configuration.AutoDetectChangesEnabled”属性为“false”可以禁用自动发现功能。

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

asp.net core 系列之并发冲突

1.用户导航到实体编辑页面;   2.第一个用户的更改还未写入数据库之前,另一个用户更新同一实体;   此时,如果未启用并发检测,当发生更新时:   最后一个更新优先。...但是,这种方法,也有一些问题: 当对同一个属性进行竞争性更改的话,无法避免数据丢失 通常不适用于web应用。它需要维持重要状态,以便跟踪所有提取值和新值。 维持大量状态可能影响应 用性能。...并且可以 显示错误消息 显示数据的当前状态 允许用户重新应用更改。 处理并发 当属性配置为并发令牌时: EF Core 验证提取属性后是否未更改属性。...2.用于确定从数据库提取实体后未更改实体。 数据库生成rowversion序号,该数字随着每次行的更新递增。...引发一个 DbUpdateConcurrencyException 异常 例子 向 Department 实体添加跟踪属性 using System; using System.Collections.Generic

1.6K20

Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)

让我们所有的操作都只通过这个一个实体上下文就可以实现了增删查改等所有对应数据库的操作。当然,我们要了解EF的生成SQL的机制我们才能更好的使用EF帮我们生成效率更高的SQL脚本。...(2):ObjectStateManage,它职责是维护实体类型实例和关系实例的对象状态和标识管理。也是EF上下文中非常重要的一个属性。...标志我们开发人员对实体的相应的操作,如下表格是实体的相关状态以及说明(摘自MSDN) 成员名称 说明 Detached 对象存在,但没有被跟踪。...在保存更改后,对象状态将更改为 Detached。 Modified 对象上的一个标量属性已更改,但尚未调用 SaveChanges 方法。...在不带更改跟踪代理的 POCO 实体中,调用 DetectChanges 方法时,已修改属性的状态将更改为 Modified。 在保存更改后,对象状态将更改为 Unchanged。

78530

Entity Framework(EF) 5

在Entity Framework宣布开源后不久Entity Framework(EF) 5就正式发布了,ADO.NET官方博客上EF5 Released列出了EF5的新特性: 枚举类型支持 性能增强,...用户可以通过预生成视图来提升性能; 缓存——在对象层次(特别是结合禁用AutoDetectChanges改善DbContext Find()性能),可用的缓存有查询计划缓存(Query Plan Caching...可选的无跟踪查询(没有状态跟踪的开销)。...目前该选项只对ObjectQuery可用,没法适用于DbSet及DbQuery类; 微型ORM风格的快速查询,如数据库上执行SQL查询以及ExecuteStoreQuery ; 设计时注意事项——每个层次对应一张表...除了EF之外,.NET开发人员还可以选择的一些(开源和商业包括在内)产品有NHibernate 和LightSpeed。

97470

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

2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员和助教都在项目分组中,调整模型,删除 Assistant...set; } public ProjectGroup Group { get; set; } Task 添加 学员信息 public Member Member { get; set; } 接下来为每一个表添加一个控制器...跟踪与不跟踪:https://docs.microsoft.com/zh-cn/ef/core/querying/tracking 默认情况下,跟踪返回实体类型的查询。...这表示可以更改这些实体实例,然后通过 SaveChanges() 持久化这些更改。...非跟踪查询 var blogs = context.Blogs .AsNoTracking() .ToList(); 还可以在上下文实例级别更改默认跟踪行为: context.ChangeTracker.QueryTrackingBehavior

1.2K11

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

2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员和助教都在项目分组中,调整模型,删除 Assistant...; } public ProjectGroup Group { get; set; } Task 添加 学员信息 public Member Member { get; set; } 接下来为每一个表添加一个控制器...跟踪与不跟踪:https://docs.microsoft.com/zh-cn/ef/core/querying/tracking 默认情况下,跟踪返回实体类型的查询。...这表示可以更改这些实体实例,然后通过 SaveChanges() 持久化这些更改。...非跟踪查询 var blogs = context.Blogs .AsNoTracking() .ToList(); 还可以在上下文实例级别更改默认跟踪行为: context.ChangeTracker.QueryTrackingBehavior

1.2K10

基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

_issueRepository.GetAsync(...)方法提供一个可选参数includeDetails,可以传递值 false 禁用该行为,不包含子集合对象,只在需要时启用它。...保存更改到数据库。 EF Core 提供 变更跟踪(Change Tracking)功能,实际上你不需要调用 _issueRepository.UpdateAsync(...) 方法,会自动进行保存。...当然,如果使用 MongoDB 数据库,则需要显示地更新已经更改实体。 所以,如果你想要编写独立于数据库提供程序的代码,应该总是为要更改实体调用UpdateAsync()方法。...} Role聚合 包含 UserRole 值对象集合,用于跟踪分配给此角色的用户。...ABP框架在请求禁用时默认返回 403 HTTP 状态码;发生内部错误是返回 500 HTTP 状态码。 code 用作本地化资源文件中的一个键,用于查找本地化消息。

2.9K30

EF Core关系配置

执行实体相关查询原生SQL语句 如果要执行的原生SQL是一个查询语句,并且查询的结果也能对应一个实体,就可以调用对应实体的DbSet的FromSqlInterpolated()方法来执行一个查询SQL...快照更改跟踪:首次跟踪一个实体的时候,EF Core 会创建这个实体的快照。...实体的状态: 已添加(Added):DbContext正在跟踪实体,但数据库中尚不存在该实体。...) 更新到数据库; “已删除”的实体,SaveChanges() 从数据库删除; 查看实体的状态: 使用DbContext的Entry()方法来获得实体EF Core中的跟踪信息对象EntityEntry...EF Core优化之AsNoTracking 如果通过DbContext查询出来的对象只是用来展示,不会发生状态改变,则可以使用AsNoTracking()来 “禁用跟踪”。

8210

UnitOfWork知多少

UOW模式的作用是在业务用例的操作中跟踪对象的所有更改(增加、删除和更新),并将所有更改的对象保存在其维护的列表中。在业务用例的终点,通过事务,一次性提交所有更改,以确保数据的完整性和有效性。...UOW的本质 通过以上的介绍,我们可以总结出实现UOW的几个要点: UOW跟踪变化 UOW维护了一个变更列表 UOW将跟踪到的已变更的对象保存到变更列表中 UOW借助事务一次性提交变更列表中的所有更改...EF中的UOW 每个DbContext类型实例都有一个ChangeTracker用来跟踪记录实体的变化。当调用SaveChanges时,所有的更改将通过事务一次性提交到数据库。...至此,我们完成了从实体到聚合再到仓储的定义和实现,万事俱备,只欠Uow。 4.5. 实现UOW 通过第3节的说明我们已经知道,EF Core已经实现了UOW模式。...而基于EF实现Uow模式的关键:确保Uow和Reopository之间共享同一个DbContext实例。

2.3K81

.NET Aspire Preview 4 发布!

可以通过环境变量 Dashboard 仪表板,仪表板的外观和感觉进行了更新,新的仪表板设计旨在减少导航标签所占用的空间,并简化在日志、指标和跟踪之间的导航。....快捷键 指标表视图,在图表或表格之间切换 数据库和实体框架改进,引入了对Entity Framework的新方法,用于配置Entity Framework。...这些方法仍然配置命令重试、健康检查、日志和遥测,此外,预览版4改进了使用EF Core工具在.NET Aspire应用中创建迁移的过程。以前,EF Core工具会因缺少数据库连接字符串而失败。...在预览版4中,.NET Aspire检测到项目是否使用EF Core工具启动,并禁用连接字符串验证,从而允许成功创建迁移。另一个挑战是与 transient 数据库应用迁移。...为此,探索了在.NET Aspire解决方案中添加一个.NET后台工作者资源的方法。

14910

EF 相见恨晚的Attach方法

一个偶然的机会,让我注意了EF 的Attach方法,于是深入了解让我大吃一惊 在我所参与的项目中所有的更新操作与删除操作都是把原对象加载出来后,再做处理,然后再保存到数据库,这样的操作不缺点在于每一次的操作都要对数据库进行两次操作...状态附加到上下文中 从解释可以看出Attach方法主要目的就是把一个没有被dbContext跟踪的对象附加到dbCotext中使其被dbContext跟踪  1   对象上下文:DBContext 建一个新的上下文实例以创建将连接到的数据库的名称...,默认状态是没有对任何对象跟踪的  2   实体状态:  在EF中对实体状会有4种状态:       2.1  Added:对象为新对象,并且已添加到对象上下文,但尚未调用    2.2  Deleted...:对象已从对象上下文中删除   2.3 Detached:对象存在,但没有被跟踪。...在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态   2.4 Modified:对象上的一个标量属性已更改,但尚未调用    2.5 Unchanged: 此对象尚未经过修改自对象附加到上下文中后

1.4K40

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

1.使用 EF.Functions.xxx 进行查询 (1).使用 EF.Functions.Like进行模糊查询要比 StartsWith、Contains 和 EndsWith 方法生成的SQL语句性能更优...EF.Functions.Like语句生成的sql为:(Like搭配SQL查询的通配符使用) var data1 = dbContext.T_UserInfor.Where(u => EF.Functions.Like...CharIndex和Right,而不是Like,而EF.Functions.Like会解析成Like语句。...4、禁用实体追踪 当我们从数据库中查询出数据时,上下文就会创建实体快照,从而追踪实体。在调用 SaveChanges 时,实体有任何更改都会保存到数据库中。...但是当我们只需要查询出实体而不需要修改时(只读),实体追踪就没有任何用途了。这时我们就可以调用 AsNoTracking 获取非追踪的数据,这样可以提高查询性能。

2.4K50

02-EF Core笔记之保存数据

EF Core通过ChangeTracker跟踪需要写入数据库的更改,当需要保存数据时,调用DbContext的SaveChanges方法完成保存。...默认情况下,每次SaveChanges方法的所保存的所有更改都将在一个事务中,要么全部保存成功,要么全部保存失败。此种情况已能满足大多数应用的需要。...并发控制 数据库并发指多个进程或用户同时访问或更改数据库中的相同数据的情况。 并发控制指的是用于在发生并发更改时确保数据一致性的特定机制。 EF Core采用乐观并发控制来解决并发冲突问题。...,随后再由客户端提交到服务器端,此时实体所在的DbContext已发生变化,如何判断对实体进行更新或添加就成了一个问题。...例如Blog对象中有多个Post对象,如果从Blog中删除部分Post,则意味着直接移除了Post对象,此时如果是断开连接的情况,则EF Core无法跟踪到Post实体列表的变更,从而导致无法正确的处理删除

1.7K40

解决因C#8.0的语言特性导致EFCore实体类型映射的错误

今天下午在排查一个EF问题时,遇到了个很隐蔽的坑,特此记录。...于是开始排查:手动创建一个空程序集,引用EFCore,从原项目拷贝EF设计时库、DbContext和各实体类,一顿操作后竟然发现在新的程序集中生成的迁移文件是符合预期的。...通过查看EF文档了解到,可为空引用类型通过以下方式影响 EF Core 的行为: 如果禁用可为空引用类型,则按约定将具有 .NET 引用类型的所有属性配置为可选 (例如 string ) 。...换而言之,启用了该功能后,把原本《引用类型可为空》的这个传统约定,更改称为了《引用类型是否可为空,是通过?语法来表明的》,实体中string类型的属性在C#中作为引用类型,自然而然地受到了这个影响。...为了一行bug,好值得的一个下午呢

21620

.NET Core 3.0 中的新变化

版本 1 随附新版 ASP.NET、实体框架 (EF) 和主要定目标到的 Web 应用程序。...在 EF Core 3.0 中,我们计划深入更改 LINQ 实现工作原理和测试方式,旨在提高它的可靠性(例如,避免破坏修补程序版本中的查询);让它能够将更多表达式正确转换为 SQL;在更多情况下生成高效查询...此提供程序将针对 Cosmos DB 中的 SQL API 启用大部分 EF Core 功能,如自动更改跟踪、LINQ 和值转换。...我们计划在 EF Core 3.0 中添加的其他功能包括,属性包实体(将数据存储在索引属性(而不是常规属性)中的实体);能够将数据库视图反向工程为查询类型;以及与新 C# 8.0 功能集成,如 IAsyncEnumerable...在 .NET Standard 1.x 中,我们只对跨各种实现已常用的 API 进行了建模。

4.9K10

EF Core 入门

在这里简单介绍一下Entity Framework(简称EF,额,别拿这个当关键字搜索,要不然你会被忽悠到一个英语培训机构的)的优点。...而EF可以说是很好的诠释了这个理念。 EF可以在不使用任何配置的前提下,自动解析类与表之间的映射(具体的映射逻辑与我们手写的ORM工具类一致或相近)。 自动跟踪更改。...在直接使用通过EF获取的元素时,EF会自动跟踪哪些字段发生了变化,当手动调用保存的时候,EF就会把数据回传给数据库。...可以延迟加载需要的数据,外键引用属性、查询结果等 丰富的映射关系,支持一对一,一对多,多对多,甚至继承、单表多实例等 可以使用Linq 进行查询 非Core版的可以通过数据库表生成实体类,两种都可以通过实体类生成表...使用工具连接到blogging.db数据库,可以看到 EF自动生成的两个实体类对应表的DDL: CREATE TABLE "ModelBs" ( "Id" INTEGER NOT NULL CONSTRAINT

2.4K10

Entity Framework 4.1 Code-First 学习笔记

() { this.Configuration.LazyLoadingEnabled =false; } 当禁用了延迟加载以后,当查询一个实体集的时候,相关的子实体也一并加载。...当 EF 访问实体的子实体的时候是如何工作的呢?你的集合是 POCO 的集合,所以,在访问的时候没有事件发生,EF 通过从你定义的实体派生一个动态的对象,然后覆盖你的子实体集合访问属性来实现。...同样的道理,当你获取一个实体的时候,即使所有的属性都是 null ,EF4.1 也将会创建一个复杂类型的对象。...DbContext.Database.SqlQuery:这个方法将返回的数据集映射到相应的对象,而不去管这个对象是不是实体。重要的是 EF 不会跟踪返回的对象,即使他们是真正的实体对象。   ...DbSet.SqlQuery:这个方法返回的实体将会被 EF 跟踪修改,所以,如果你在这些返回的实体上做了修改,当 DbContext.SaveChanges 被调用的时候,将会被处理。

1.6K10
领券