Массовое удаление строк с помощью RemoveRange ()

c# entity-framework entity-framework-6

Вопрос

Я пытаюсь удалить несколько строк из таблицы.

В обычном SQL Server это было бы просто:

DELETE FROM Table
WHERE
    Table.Column = 'SomeRandomValue'
    AND Table.Column2 = 'AnotherRandomValue'

В Entity Framework 6 они ввели метод RemoveRange () .
Однако, когда я использую его, вместо того, чтобы удалять строки, используя предложения where, которые я предоставил, Entity Framework запрашивает базу данных, чтобы получить все строки, которые соответствуют предложениям where, и удалять их один за другим, используя их первичные ключи.

Является ли это текущим ограничением EntityFramework? Или я использую RemoveRange() неправильно?

RemoveRange() как я использую RemoveRange() :

db.Tables.RemoveRange(
    db.Tables
        .Where(_ => _.Column == 'SomeRandomValue'
            && _.Column2 == 'AnotherRandomValue')
);

Принятый ответ

Я думаю, что мы достигли здесь ограничения EF. Иногда вам просто нужно использовать ExecuteSqlCommand, чтобы оставаться работоспособным.


Ответ эксперта

Вы ищете библиотеку пакетного удаления, которая удаляет несколько записей в базе данных из запроса LINQ без загрузки объектов.

Существует несколько библиотек, поддерживающих эту функцию.

Вы можете найти список здесь: Библиотека Entity Framework Batch Delete

Отказ от ответственности : Я являюсь владельцем проекта Entity Framework Plus

// using Z.EntityFramework.Plus; // Don't forget to include this.

// DELETE directly in SQL (without loading entities)
db.Tables.Where(_ => _.Column == 'SomeRandomValue'
                     && _.Column2 == 'AnotherRandomValue')
         .Delete();

// DELETE using a BatchSize      
db.Tables.Where(_ => _.Column == 'SomeRandomValue'
                     && _.Column2 == 'AnotherRandomValue')
         .Delete(x => x.BatchSize = 1000);

Wiki: EF + Batch Delete




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему