Как добавить список сущностей в DbSet - PullRequest
8 голосов
/ 12 февраля 2012

DbSet.Add () добавляет одну сущность в DbSet. Но нет DbSet.AddRange () для добавления списка сущностей. Есть ли метод, который я могу вызвать непосредственно из EF, который позволяет мне добавить список сущностей? Если нет, есть ли причина, по которой EF не предоставляет такой метод?

Ответы [ 2 ]

11 голосов
/ 01 октября 2013

В EF6 доступны как DbSet.AddRange, так и DbSet.RemoveRange.

Причина их реализации заключается в повышении производительности, что достигается путем отключения DetectChanges для каждого отдельного добавления или удаления объекта.

Подробнее:

ПРИМЕЧАНИЕ. Официальной документации по этому методу до сих пор нет, поскольку EF по-прежнему RC1.

ОБНОВЛЕНИЕ: EF6 уже выпущен, а официальнодокументация для .AddRange () находится здесь , но объяснение того, что происходит внутри, приведено в ссылках выше.

6 голосов
/ 13 февраля 2012

Комментарий Эранги, возможно, правдив. Я предполагаю, что реальная проблема заключается в том, что следует делать, если какой-либо объект в списке имеет установленное свойство ключа, если ключом для базовой таблицы является столбец идентификации:

  • Бросить исключение? OR
  • установить ключ в ноль, чтобы вставить новый объект с другим ключом? OR
  • обновить объект с тем же ключом?

По этой причине не имеет особого смысла реализовывать AddRange () для универсального класса DbSet. Если вы хотите что-то конкретное, отвечающее вашим потребностям, вы можете расширить DbSet следующим образом

   public static class EFExtension 
   {

      public static void AddRange<TEntity>(this DbSet<TEntity> dbSet, IList<TEntity> entities) where TEntity : class
      {
        foreach (TEntity e in entities)
        {
            dbSet.Add(e);
        }
     }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...