关于c#:何时使用DbSet < T > .Add()与DbSet < T > .Attach()

When to use DbSet.Add() vs DbSet.Attach()

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


好吧,当您使用Attach时,您会告诉上下文该实体已存在于数据库中,而SaveChanges不会对连接的实体产生影响。另一方面,Add会将上下文中实体的状态(如果已经存在)更改为Added,这意味着当您调用SaveChanges时,它将始终将实体插入数据库中。

就是这样。


in case of ef-core

当您将具有导航属性的新实体添加到数据库时,附加功能非常有用。仅附加将新创建的项目标记为已更改。

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

所以附加功能是因为该行业已经有一个ID。附加标记为"不变"。而您没有ID的员工将其标记为"已添加"。

您可以在这里阅读有关此主题的更多信息:https://www.learnentityframeworkcore.com/dbcontext/modifying-data#attach