何时使用DbSet 。Add()vs DbSet 。Attach()

问题描述 投票:29回答:2

我一直在使用Add()并遇到一个问题:在Add生育孩子时,父实体在数据库中被复制。使用Attach()解决了这个问题,但我想知道为什么会这样,而不是一味地绊脚石。

c# asp.net-mvc entity-framework
2个回答
32
投票

[好,当您使用Attach时,您会告诉上下文该实体已在数据库中,SaveChanges将对附加的实体无效。另一方面,Add将上下文中实体的状态(如果已经存在)更改为Added,这意味着当您调用SaveChanges时,它将总是将实体插入数据库中。

就是区别。


1
投票

如果使用ef-core

Attach适用于将具有导航属性的新实体添加到数据库的情况。 附加仅将新创建的项目标记为已更改

假设您正在向行业添加新员工。如果数据库中已经存在该行业,则必须具有一个ID。并且您要添加的Employee尚未插入数据库,因此它还没有ID(我在这里谈论行ID)。

所以附加功能是因为该行业已经具有ID。附加标记为未更改。而您没有ID的员工将其标记为已添加

您可以在此处阅读有关此主题的更多信息:https://www.learnentityframeworkcore.com/dbcontext/modifying-data#attach

© www.soinside.com 2019 - 2024. All rights reserved.