首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用DbSet<T>.Add()与DbSet<T>.Attach()

何时使用DbSet<T>.Add()与DbSet<T>.Attach()
EN

Stack Overflow用户
提问于 2013-04-11 22:07:26
回答 2查看 18.2K关注 0票数 32

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-11 22:19:58

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

这就是区别所在。

票数 35
EN

Stack Overflow用户

发布于 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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15950946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档