首页 > 解决方案 > 我什么时候想使用 Add 方法,而不是 Attach 方法?

问题描述

我知道关于课程之间的区别AddAttach方法存在现有/较旧的问题DbSet<TEntity>。需要明确的是,我不会再问这个问题了。我知道它们是如何工作的以及它们之间的功能差异。

我从他们在幕后所做的事情(如他们的文档中所述)中了解到的是,Attach完全涵盖了Add's 的功能(如果我错了,请纠正我)。更好的是,它以更谨慎的方式执行此操作(在断开连接的图中,将实体标记为Unchanged而不是Added如果它具有 PK 值集)。

这就是让我想知道该Add方法存在背后的原因的原因。我主要将 EF Core 与断开连接的实体一起使用,并且可能存在我不知道的情况。

Add那么,由于该Attach方法不合适,我可能想要使用该方法的可能情况是什么?

标签: entity-framework-core

解决方案


我看到两个原因:

  1. 使代码不言自明。如果您创建一个新的实体对象,Add它,不要Attach它。并非所有开发人员都会理解附加实体可能会将其标记为Added.

  2. 强制将实体标记为插入。例如,当“克隆”现有实体时(即将其保存为新的数据库记录)。EF 会将现有实体标记为Added与其键值无关,并将其作为新行插入数据库中。

至于第二点,当主键自动生成时,在 EF6 中,这就是它的全部内容,EF 将插入实体并从数据库中获取其新的键值。EF 核心将尝试使用现有键值插入新实体,因此您首先必须清除它们,即将它们设置为默认值。

简而言之:当附加可能是新实体或现有实体的任意组合的对象时,Add用于旨在添加数据的代码。Attach


推荐阅读