Я использовал Add()
и столкнулся с проблемой, когда родительский объект дублировался в базе данных при Add
подключении дочернего элемента. Использование Attach()
решило это, но я хотел бы знать, почему вместо того, чтобы слепо спотыкаться.
Когда использовать DbSet <T>.Add() vs DbSet <T>.Attach()
Ответ 1
Хорошо, когда вы используете Attach
, вы указываете контекст, что объект уже находится в базе данных, SaveChanges
не будет влиять на прикрепленные объекты. Add
, с другой стороны, изменяет состояние объекта в контексте (если оно уже есть) до Added
, что означает, что всегда вставляет объект в базу данных при вызове SaveChanges
.
Это различие.