何时使用DbSet <t> .Add()vs DbSet <t> .Attach()</t> </t>

时间:2013-04-11 14:07:26

标签: c# asp.net-mvc entity-framework

我一直在使用Add()并遇到一个问题,当Add一个孩子时,父实体在数据库中被复制了。使用Attach()解决了这个问题,但我想知道为什么而不是盲目地磕磕绊绊。

2 个答案:

答案 0 :(得分:28)

好吧,当你使用Attach告诉上下文实体已经在数据库中时,SaveChanges对附加实体没有影响。另一方面,Add将上下文中的实体状态(如果已经存在)更改为Added,这意味着它将始终将实体插入数据库中当你拨打SaveChanges时。

这就是区别。

答案 1 :(得分:3)

如果是ef-core

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

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

所以附件的作用是因为该行业已经有一个ID。附加标记,标记为未更改。而您没有ID的员工将其标记为已添加

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