В чем разница между IDbSet.Add и DbEntityEntry.State = EntityState.Added? - PullRequest
15 голосов
/ 31 января 2012

В EF 4.1+, есть ли разница между этими двумя строками кода?

dbContext.SomeEntitySet.Add(entityInstance);
dbContext.Entry(entityInstance).State = EntityState.Added;

Или они делают то же самое?Мне интересно, может ли одно повлиять на дочерние коллекции / свойства навигации иначе, чем на другое.

Ответы [ 2 ]

20 голосов
/ 18 февраля 2014

Когда вы используете dbContext.SomeEntitySet.Add(entityInstance);, статус для этого и всех связанных с ним объектов / коллекций устанавливается на добавление, тогда как dbContext.Entry(entityInstance).State = EntityState.Added; добавляет также все связанные объекты / коллекции в контекст, но оставляет их как неизмененные. Поэтому, если сущность, которую вы пытаетесь создать, имеет связанную сущность (и ее значение не равно нулю), при использовании Add она создаст новый объект для этой дочерней сущности, а с другой стороны - нет.

1 голос
/ 20 ноября 2015

Я только что проверил это с EF 6, со связанными объектами / навигационными свойствами, и в обоих случаях созданные объекты были идентичны.(Все родительские и связанные дочерние объекты были созданы.) Единственное отличие, которое я заметил, было то, что Add был быстрее примерно в 2 раза. У моих данных было 1000 родительских объектов, каждый из которых имел 5 дочерних объектов, в общей сложности 6000 объектов записывались в БД..

...