我一直在使用Add()
并遇到一个问题,即当一个孩子在数据库中复制一个父实体Add
。使用Attach()
解决了这个问题,但我想知道为什么而不是盲目地跌跌撞撞。
问问题
18527 次
2 回答
36
好吧,当您使用Attach
时告诉上下文实体已经在数据库中,SaveChanges
对附加实体没有影响。Add
另一方面,将上下文中实体的状态(如果它已经存在)更改为,这意味着当您调用 时Added
,它将始终SaveChanges
将实体插入数据库中。
这就是区别。
于 2013-04-11T14:19:57.823 回答
6
在 ef-core 的情况下
附加适用于向具有导航属性的数据库添加新实体的情况。附加仅将新创建的项目标记为已更改。
假设您要向行业添加新员工。如果数据库中已经存在该行业,则它必须有一个 ID。并且您要添加的 Employee 尚未插入到数据库中,因此它还没有 ID(我在这里谈论的是行 ID)。
所以 attach 所做的是因为 Industry 已经有一个 ID。附加标记为Unchanged。并且您还没有 ID 的 Employee 将其标记为已添加。
您可以在此处阅读有关此主题的更多信息:https ://www.learnentityframeworkcore.com/dbcontext/modifying-data#attach
于 2020-04-30T20:48:46.627 回答