我一直在使用Add(),并遇到了一个问题,即当Add使用子实体时,父实体被复制到数据库中。使用Attach()解决了这个问题,但我想知道为什么,而不是盲目地到处走走停停。
发布于 2013-04-11 22:19:58
那么,当您使用Attach时,您告诉上下文实体已经在数据库中,SaveChanges对附加的实体没有任何影响。另一方面,Add将上下文中实体的状态(如果已经存在)更改为Added,这意味着当您调用SaveChanges时,它将始终插入数据库中的实体。
这就是区别所在。
发布于 2020-05-01 04:48:47
使用ef-core时的
Attach适用于向具有导航属性的数据库添加新实体的情况。Attach仅将新创建的项目标记为changed。
假设您正在向一个行业中添加一个新员工。如果该行业已经存在于数据库中,那么它必须有一个ID。而且您要添加的员工还没有插入到数据库中,所以它还没有ID (我在这里说的是行ID)。
所以attach所做的是因为该行业已经有了一个ID。Attach将其标记为未更改的。还没有ID的员工会将其标记为添加了。
您可以在此处阅读有关此主题的更多信息:https://www.learnentityframeworkcore.com/dbcontext/modifying-data#attach
https://stackoverflow.com/questions/15950946
复制相似问题