Как удалить элементы по идентификатору? - PullRequest
2 голосов
/ 21 февраля 2011

У меня есть список идентификаторов

IEnumerable<long> ids

Как я могу удалить из таблицы, где совпадает идентификатор?

Ответы [ 4 ]

5 голосов
/ 21 февраля 2011

«Стандартный» способ в соответствии с документами MSDN состоит в том, чтобы использовать эти идентификаторы для извлечения каждого из объектов, а затем удалить их с помощью команды DeleteObject:

context.Where(x=>ids.Contains(x.Id)).ToList().ForEach(context.DeleteObject);

Это даст N + 1 циклических переходовв БД.Это распространенный недостаток ORM;они отлично справляются с 99% ежедневного использования SQL приложением (запрашивая результаты, создавая / обновляя / удаляя отдельные объекты), но на самом деле не предназначены для этих массовых операций.

Вы также можете создать запросиспользуя ExecuteStoreCommand, где вы "DELETE FROM table WHERE id IN @p1" и указываете список идентификаторов в качестве параметра.

0 голосов
/ 21 февраля 2011

Как насчет чего-то вроде

context.Entities.Where(e => ids.Contains(e.id))
                .ToList()
                .ForEach(e => context.SampleEntities.DeleteObject(e) );

context.saveChanges();
0 голосов
/ 21 февраля 2011

Обычно

var db = GetYourDBContext();
var ItemsToDelete = (from id in ids
                     from item in db.TableWithItems
                     where item.id == id
                     select item).ToList();

foreach (Item item in ItemsToDelete)
    db.DeleteObject(item);

db.SaveChanges();
0 голосов
/ 21 февраля 2011

Предполагая, что у вас есть Id в качестве первичного ключа в ваших сущностях, и у вас есть сущность с именем SampleEntity, вы можете сделать что-то вроде этого:

foreach(long id in ids)
{
  var sampleEntity = context.SampleEntities.SingleOrDefault( e => e.Id == id);
  if(sampleEntity!=null)
     context.SampleEntities.DeleteObject(sampleEntity);
}
context.SaveChanges();

EF не поддерживает пакетную операцию, поэтому вам придется удалять объекты по одному или, альтернативно, выполнять прямой запрос хранилища (SQL), чтобы выполнить удаление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...