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

重新连接实体时,实体框架不会跟踪集合更改

实体框架(Entity Framework)是微软提供的一种对象关系映射(ORM)框架,用于在应用程序和数据库之间进行数据交互。当重新连接实体时,实体框架默认情况下不会跟踪集合的更改。

实体框架跟踪实体对象的状态,并在适当的时候将更改保存到数据库中。当实体对象从数据库中检索出来时,实体框架会将其状态设置为已加载(Loaded),并开始跟踪对该实体的更改。当重新连接实体时,实体框架会将实体的状态设置为未更改(Unchanged),这意味着实体框架不会自动跟踪集合的更改。

如果需要重新连接实体时跟踪集合的更改,可以通过以下方式之一实现:

  1. 手动跟踪集合更改:在重新连接实体后,可以手动迭代集合并标记更改。例如,可以使用AddRange方法将集合中的新实体添加到上下文中,使用RemoveRange方法将集合中的实体从上下文中删除。
  2. 使用虚拟导航属性:在定义实体类时,可以将集合属性声明为虚拟属性。这样,在重新连接实体后,实体框架将自动跟踪集合的更改。例如:
代码语言:csharp
复制
public class Order
{
    public int Id { get; set; }
    public string OrderNumber { get; set; }
    public virtual ICollection<OrderItem> Items { get; set; }
}

public class OrderItem
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public decimal Price { get; set; }
}

在重新连接实体后,可以直接对Items集合进行添加、删除或修改操作,实体框架会自动跟踪这些更改。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以根据实际需求和场景进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

保存更改到数据库。 EF Core 提供 变更跟踪(Change Tracking)功能,实际上你不需要调用 _issueRepository.UpdateAsync(...) 方法,会自动进行保存。...另一方面,用户可能有角色集合,因为实际情况中用户拥有的角色数量是有限的,不会太多。当您使用用户聚合时,拥有一个角色列表可能会很有用,且不会影响性能。...这并不意味着子集合实体应该总是有复合主键,只有当需要设置;通常是单一的ID属性。 复合主键实际上是关系型数据库的一个概念,因为子集合实体有自己的表,需要一个主键。...当传递的值为空,抛出异常ArgumentException。 初始化子集合,当使用 Labels 集合时,不会获取到空引用异常。...如果以后需要,可以添加更改方法并将其设置器设置为私有。领域层是内部项目,并不会暴露给客户端使用,所以这种更改不会有问题。

3K30

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

标志我们开发人员对实体的相应的操作,如下表格是实体的相关状态以及说明(摘自MSDN) 成员名称 说明 Detached 对象存在,但没有被跟踪。...在不带更改跟踪代理的 POCO 实体中,调用 DetectChanges 方法,已修改属性的状态将更改为 Modified。 在保存更改后,对象状态将更改为 Unchanged。...最终根据此集合以及状态再加上表实体映射的元数据信息生成最终的SQL脚本。...所以,我们在对应多个ObjectContext实例进行操作要注意,调用实例自己的SaveChanges()方法,它只会对自己实例内存空间的操作映射回数据库,而其他ObjectContext实例中的实体集合的修改都不受影响...而且EF自动帮我们做了缓存的处理,当我们第一次查询某个实体它会自动帮我们从数据库取出数据,并装配成实体类交给我们开发人员,当第二次获取相同数据,它会先从缓存中查找,如果已经存在数据了就立即返回,不会查询数据库

79230
  • 如何来实现SpringBoot应用的JPA数据持久化和热插拔

    由于“阻抗失配”的存在,使得开发人员在使用关系型数据库不得不花很多功夫去完成两种语言之间的相互转化。 而ORM框架的产生,正是为了简化这种转化操作。...与实体在概念上比较接近的另外一个领域对象是值对象。实体是可以被跟踪的,通常会有一个主键(唯一标识)来追踪其状态。而值对象则没有这种标识,我们只关心值对象的属性。...这意味着静态资源更改必须构建才能使更改生效。不同的IDE触发更新的方式有所不同。默认情况下,在Eclipse中,保存修改的文件将导致类路径被更新并触发重新启动。...重新加载Java类而不重新启动容器 现代IDE (如Eclipse、IDEA 等)都支持字节码的热插拔,所以如果进行了不影响类或方法签名的更改,那么应重新加载Java类,而不是重启容器,这样会更快、更干净...,而且不会因为重启容器而产生副作用。

    4.4K30

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程四

    原标题:Spring认证中国教育管理中心-Spring Data R2DBC框架教程四(Spring中国教育管理中心) 14.3.实体回调 Spring Data 基础设施提供了在调用某些方法之前和之后修改实体的钩子...在持久化之前的实体。 许多存储特定参数,例如实体持久化到的集合。 例 77....在持久化之前的实体。 许多存储特定参数,例如实体持久化到的集合。 可选的实体回调参数由实现 Spring Data 模块定义并从EntityCallback.callback()....DatabaseClient连接到多个相同类型的数据库,使用各种bean 很有用。...15.1.基本 Spring Data 提供了复杂的支持,以透明地跟踪谁创建或更改实体以及更改发生的时间。要从该功能中受益,您必须为实体类配备审计元数据,这些元数据可以使用注释或通过实现接口来定义。

    71430

    如何有效管理XDPeBPF以获得更好的DDoS保护

    此根(可能是虚拟的)组织各种配置实体以形成活动配置。实体要么直接连接到根以进行立即全局访问,要么嵌套在其他实体中以进行结构化组织。...访问特定实体从根开始,按顺序(逐级“解除引用”)进行,直到所需的实体。例如,要从集合中的“选项”结构中检索布尔标志,你需要导航到集合,找到结构,然后检索标志。...但是,管理这些配置的安全性并不能保证在配置版本之间切换的原子性。 在线流量不断变化的格局意味着 安全运营 团队必须对安全策略进行频繁更改。...对于可恢复错误,如果在更新期间出现问题,你可以简单地停止,并且不会进行任何更改。你可以修复任何错误,而不会有风险。 不可恢复错误有点棘手。...网络接口卡 (NIC) 连接到调度程序、程序映射和状态映射,从而导致实际程序配置。 热重新加载过程能够快速检测和纠正配置问题,并在需要快速恢复到以前的稳定版本。

    13610

    Spring认证中国教育管理中心-Spring Data MongoDB教程八

    请注意,由 lambda 表达式实现的回调不会公开类型信息,因此使用不可分配的实体调用这些会影响回调吞吐量。使用classorenum为回调 bean 启用类型过滤。...保留内部异常和消息,因此不会丢失任何信息。...当新文档到达上限集合时,它会发出数据。 如果查询返回不匹配或游标返回集合“结尾”处的文档,然后应用程序删除该文档,则可跟踪游标可能会失效或无效。...从 MongoDB 3.6 开始,Change Streams允许应用程序获得有关更改的通知,而无需跟踪 oplog。...可以同时在集合和数据库级别进行观察,而数据库级别变体发布来自数据库内所有集合更改。订阅数据库更改,请确保为事件类型使用合适的类型,因为转换可能无法正确应用于不同的实体类型。

    2K30

    C# API中的模型和它们的接口设计

    即使在编译使用IRepository接口来“解耦”类,也无法消除与外部依赖的关系。 在判断什么是数据模型,要小心那些“存活实体”。...LINQ和Entity Framework等ORM框架可能会利用这些信息进行跟踪。...为此,集合需要在将对象添加到集合或从集合中移除附加和移除事件处理程序。 变更跟踪和撤消 虽然使用不是很频繁,.NET还是提供了专门用于跟踪对象变更的接口,这些接口甚至还提供了撤消功能。...可恢复变更跟踪 IRevertableChangeTracking添加了一个RejectChanges方法来撤消任何挂起的更改。这里存在同样的问题,即这个方法适用于本地对象还是子对象。...这意味着ORM需要单独跟踪发生变更的字段,或者假设所有内容都发生变化,并将整个对象重新保存到数据库。 Equals、GetHashCode和IEquatable 这是我建议避免的一系列特性。

    1.6K20

    什么是JPA?Java Persistence API简介

    配置Java ORM层 设置新项目以使用JPA,需要配置数据存储区和JPA提供程序。您将配置数据存储连接器以连接到您选择的数据库(SQL或NoSQL)。...默认情况下,此配置假定主键将由数据库设置 - 例如,当字段设置为在表上自动递增。 JPA支持生成对象主键的其他策略。它还有用于更改单个字段名称的注释。...例如,Musician实体可以与由诸如List或Set的集合表示的实体具有一对多的关系。...每个performance都将与单个Musician关联,该列由此列跟踪。当JPA将一个 Musician或一个Performance 加载到数据库中,它将使用此信息重新构建对象图。...在JPA中获取策略 除了知道在数据库中放置相关实体的位置之外,JPA还需要知道如何加载它们。获取策略告诉JPA如何加载相关实体。加载和保存对象,JPA框架必须能够微调对象图的处理方式。

    10.2K30

    EF Core关系配置

    SQL EFCore如何跟踪实体数据变化 快照更改跟踪:首次跟踪一个实体的时候,EF Core 会创建这个实体的快照。...执行SaveChanges()等方法,EF Core将会把存储的快照中的值与实体的当前值进行比较。...已删除(Deleted):DbContext正在跟踪实体,并存在于数据库中,但在下次调用 SaveChanges 要从数据库中删除对应数据。...EF Core优化之AsNoTracking 如果通过DbContext查询出来的对象只是用来展示,不会发生状态改变,则可以使用AsNoTracking()来 “禁用跟踪”。...Tips:如果查询出来的对象不会被修改、删除等,那么查询可以AsNoTracking(),就能降低内存占用。 实体状态跟踪的妙用 常规更新需要先查询、再更新,两条SQL。

    10210

    Apriso 开发葵花宝典之传说的完结篇GPM

    全局部署视图在更改被监视环境的配置设置使用实时远程处理。...此屏幕上列出的所有实体都将被选中。 留服务器实体为默认修订——如果包包含被设置为默认修订的实体,它们将不会覆盖服务器上存在的这些实体的默认修订。如果实体在服务器上不存在,它们将被设置为默认值。...但是,如果包之前已经在节点上部署过,并且现在正在重新部署,那么一旦服务运行,系统就不会尝试再次部署它。在这种情况下,应该手动重新部署包。...如果GPM停止工作,集群管理器不会自动重新启动GPM。如果GPM在活动集群节点上停止,则在手动启动服务之前,应用程序无法连接到该集群(并执行任何操作)。...由于项目构建号,可以跟踪部署状态。

    24310

    Domain Driven Design Reference(三)—— 模型驱动设计的构建模块

    当与领域相关的代码通过如此大量的其他代码被扩散,变得非常难以理解和推理。UI的表面变化实际上可以改变业务逻辑。要更改业务规则,可能需要仔细跟踪UI代码,数据库代码或其他程序元素。...跟踪实体的身份标识至关重要。但将身份标识附加到其他对象可能会伤害系统性能,增加分析工作,并使所有对象看起来都一模一样。软件设计是一个复杂的持续战斗。...不要给值对象任何身份标识,并避免保留实体所必需的设计复杂性。 领域事件   领域专家关心的事情发生了。一个实体负责跟踪其状态和规定其生命周期的规则。...我们始终保持聚合内部一致,而异步的进行其他更改。当更改在网络的节点间传播,可能很难解决无序或来自不同来源的多个更新。   因此: 将关于领域中活动的模型信息视为一系列离散事件。...领域逻辑移入查询和应用程序层代码,实体和值对象变成仅仅为数据容器。   因此: 对于需要全局访问的每种聚合类型,创建一个服务,它可以提供所有聚合根类型的对象的在一个内存集合中的错觉。

    47120

    SqlAlchemy 2.0 中文文档(十四)

    处理键突变和字典集合的反向填充 当使用attribute_keyed_dict(),字典的“键”来自目标对象上的属性。对此键的更改不会跟踪。...仪器化意味着对集合的常规操作将被跟踪,并且在刷新更改写入数据库。此外,集合操作可以触发*事件*,这些事件表明必须进行某些次要操作。...不会跟踪此键的更改。这意味着必须在首次使用时分配键,如果键更改,则集合不会发生变化。可能出现问题的典型示例是依赖 backrefs 填充属性映射集合。...参见基于字典的集合的代理和复合关联代理以获取示例。 处理键变化和字典集合的反向填充 当使用attribute_keyed_dict(),字典的“键”来自目标对象上的属性。对此键的更改不会跟踪。...**对此键的更改不会跟踪**。这意味着键必须在首次使用时被分配,并且如果键发生更改,则集合不会发生变化。一个典型的例子是当依赖反向引用来填充属性映射集合时可能会出现问题。

    19510

    SqlAlchemy 2.0 中文文档(二十五)

    当指定时,此会话执行的所有 SQL 操作都将通过此连接执行。 binds – 一个字典,可以指定任意数量的Engine或Connection对象作为每个实体连接的源。...method commit() → None 刷新待处理的更改并提交当前事务。 当 COMMIT 操作完成,所有对象都完全过期,擦除其内部内容,当下次访问这些对象,将自动重新加载。...在此期间,这些对象处于过期状态,并且如果从Session中分离出来,则不会起作用。此外,当使用基于 asyncio 的 API ,不支持此重新加载操作。...指定时,此会话执行的所有 SQL 操作将通过此可连接对象执行。 binds – 一个字典,可能指定任意数量的Engine或Connection对象作为 SQL 操作的连接源,以实体为单位。...method commit() → None 刷新待定更改并提交当前事务。 当 COMMIT 操作完成,所有对象都将被完全过期,擦除其内部内容,下次访问这些对象将自动重新加载。

    15410

    重构一个繁琐的数据结构

    这样客户端得到的数据,只是一个简单的对象集合。 3.实体集合所有的更改对象位置只能使用一个特定的操作来实现排序:void Move(Object Item, Int32 index)。    ...这个约束产生的主要是原因是:一:使用了CSLA作为实现分布式应用的框架,所有实体集合,都需要继承BusinessListBase。...而对这个集合中的实体进行操作,经常会引起该实体的状态的改变;二:目前的OpenExpressApp框架中,要求实体直接绑定到表示层,而不能对它进行转换,如使用“ViewModel”。...泛型的ISimpleMovableCollection同样也没有实现ICollection,原因也是因为泛型的ICollection也有更改集合的操作。    ...另外,我在这里定义的这些集合,都是一个泛型和一个非泛型配合。这是因为代码的实现是在OpenExpressApp框架中,而在框架实体类的操作有时候是针对泛型实体,有时候却针对非泛型实体

    771100

    02-EF Core笔记之保存数据

    EF Core通过ChangeTracker跟踪需要写入数据库的更改,当需要保存数据,调用DbContext的SaveChanges方法完成保存。...EF Core对于提供了更细粒度的管理,它允许我们定义删除行为,来控制依赖关系被移除,如何处理关系的子实体。...如果已回滚事务,则所有操作都不会应用到数据库。 默认情况下,每次SaveChanges方法的所保存的所有更改都将在一个事务中,要么全部保存成功,要么全部保存失败。此种情况已能满足大多数应用的需要。...,并对发生改变的属性进行重新赋值,未发生改变的值保持不变,生成更新数据库语句也仅更新改变的字段。...例如Blog对象中有多个Post对象,如果从Blog中删除部分Post,则意味着直接移除了Post对象,此时如果是断开连接的情况,则EF Core无法跟踪到Post实体列表的变更,从而导致无法正确的处理删除

    1.8K40

    Spring认证中国教育管理中心-Spring Data MongoDB教程十四

    当对象存储在 MongoDB 中,有一个 DBRef 列表而不是Account对象本身。在加载DBRefs 的集合时,建议将集合类型中保存的引用限制为特定的 MongoDB 集合。...这允许批量加载所有引用,而指向不同 MongoDB 集合的引用需要一一解析。 映射框架不处理级联保存。如果更改Account对象引用的Person对象,则必须Account单独保存该对象。...映射框架不处理级联保存,因此请确保单独保留引用的实体。 添加对现有实体的引用。 引用的Account实体表示为其_id值的数组。...使用$or运算符批量加载文档引用集合。 尽最大努力在内存中恢复原始元素顺序。仅在使用等式表达式才可以恢复顺序,而在使用 MongoDB 查询运算符则无法恢复。...确保工具不会意外触发代理解析,例如调用toString(). 不支持使用反应式基础架构阅读文档引用。 18.5.10.映射框架事件 在映射过程的整个生命周期中都会触发事件。

    5.8K10

    HTTP headers

    中间代理必须重新传输未经修改的标头,并且缓存必须存储它们。 逐跳标题 这些标头仅对单个传输级连接有意义,并且不得由代理重新传输或缓存。请注意,只能使用Connection常规标头设置逐跳标头。...If-Modified-Since 使请求成为条件请求,并期望仅在给定日期之后对实体进行修改的情况下才发送实体。仅当高速缓存已过期才用于传输数据。...不跟踪 Section DNT 表示用户的跟踪首选项。 Tk 指示相应响应的跟踪状态。...X-Powered-By 可以由托管环境或其他框架来设置,并包含有关它们的信息,而不会为应用程序或其访问者提供任何有用的信息。取消设置此标头,以避免暴露潜在的漏洞。...该标准建立了在当前客户端,服务器,传输协议连接上升级或更改为其他协议的规则。例如,假设服务器决定确认并实现“升级”标头字段,则此标头标准允许客户端从HTTP 1.1更改为HTTP 2.0。

    7.7K70

    Spring Data JDBC参考文档

    除其他外,它跟踪实体更改。它为你做延迟加载。它使您可以将广泛的对象构造映射到同样广泛的数据库设计。 这很棒,让很多事情变得非常简单。只需看一下基本的 JPA 教程。...如果您保存一个实体,它将被保存。如果您不这样做,则不会。没有脏跟踪,也没有会话。 有一个关于如何将实体映射到表的简单模型。它可能只适用于相当简单的情况。如果您不喜欢那样,您应该编写自己的策略。...这些对于 Spring Data JDBC 来说可能更为重要,因为在某种程度上,它们与使用关系数据库的常规做法背道而驰。 聚合是一组实体,可以保证在对其进行原子更改之间保持一致。...每个聚合都有一个聚合根,它是聚合的实体之一。聚合仅通过该聚合根上的方法进行操作。这些是前面提到的原子变化。 存储库是对持久存储的抽象,它看起来像是某种类型的所有聚合的集合。...在当前的实现中,从聚合根引用的实体被 Spring Data JDBC 删除并重新创建。 您可以使用与您的工作和设计数据库的风格相匹配的实现来覆盖存储库方法。 9.3.

    1.4K30

    DAMA数据管理知识体系指南之数据架构和建模

    矩阵框架的两个维度为:问询沟通(如是什么、怎样做、在哪里、是谁、什么时间和为什么)在列中显示,重新定义转换(如识别、定义、描述、规范、配置和实例)在行中显示。...框架分类按照单元格呈现(问询和转换之间的交叉)。框架的每个单元格代表一个独特的设计组件。...按照结构分:单一键、组合键(多个属性集合)、复合键(组合键 + 其他)、代理键(也是单一键,表的唯一标识符,技术上的自增ID) 按照功能分:候选键(标识实体实例的最小属性集合,可能包含一个或多个属性)、...3、关系模型和维度模型不同层级的展现 3.1、概念模型CDM 一系列相关主题域的集合来描述概要数据需求。概念数据模型仅包括给定的领域和职能中基础和关键的业务实体,同时也给出实体实体之间关系的描述。...注意对数据模型的每次更改,需要以时间线记录变更内容。如果更改影响到了逻辑数据模型,如新的或更改了的业务数据要求,则需要数据分析师或架构师审核并批准对模型的更改

    1.5K40
    领券