我一直在使用Add()
并遇到一个问题:在Add
生育孩子时,父实体在数据库中被复制。使用Attach()
解决了这个问题,但我想知道为什么会这样,而不是一味地绊脚石。
[好,当您使用Attach
时,您会告诉上下文该实体已在数据库中,SaveChanges
将对附加的实体无效。另一方面,Add
将上下文中实体的状态(如果已经存在)更改为Added
,这意味着当您调用SaveChanges
时,它将总是将实体插入数据库中。
就是区别。
如果使用ef-core
Attach适用于将具有导航属性的新实体添加到数据库的情况。 附加仅将新创建的项目标记为已更改。
假设您正在向行业添加新员工。如果数据库中已经存在该行业,则必须具有一个ID。并且您要添加的Employee尚未插入数据库,因此它还没有ID(我在这里谈论行ID)。
所以附加功能是因为该行业已经具有ID。附加标记为未更改。而您没有ID的员工将其标记为已添加。
您可以在此处阅读有关此主题的更多信息:https://www.learnentityframeworkcore.com/dbcontext/modifying-data#attach