何时使用DbSet .Add()vs DbSet .Attach()

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

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

这就是区别。