何时使用DbSet. add()与DbSet. attach()

本文关键字:DbSet attach 何时使 add | 更新日期: 2023-09-27 18:08:44

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

何时使用DbSet<T>. add()与DbSet<T>. attach()

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

Attach适用于向具有导航属性的数据库添加新实体的情况。Attach只将新创建的项目标记为changed

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

attach所做的是,因为Industry已经有了一个ID。Attach将其标记为Unchanged。你的员工谁没有一个ID还附加标记为添加

你可以在这里阅读更多关于这个主题:https://www.learnentityframeworkcore.com/dbcontext/modifying-data#attach