Подтвердить что ты не робот

В чем разница между IDbSet.Add и DbEntityEntry.State = EntityState.Added?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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