Сформировать UPDATE в Entity Framework

347
28 декабря 2016, 02:24

Вопрос проще понять, если сразу взглянуть на код

static int Reset()
{
    using (ApplicationContext db = new ApplicationContext())
    {
        return db.Database.ExecuteSqlCommand("UPDATE Employees SET StatusCode=0 WHERE StatusCode>0");
    }
}

Можно ли средствами EF сформировать запрос на обновление (одним запросом, а не сначала прочитать в память, изменить и вызывать db.SaveChanges() - считаю это крайне неэффективным), или использовать ExecuteSqlCommand() в таких случаях - единственное решение?

Answer 1

Посмотрите пакет EntityFramework.Extended - кажется, он делает именно то что вам нужно.

Но надо отметить, что "пакетные" операции не дружат с кешем контекста - то есть возможен конфликт при сохранении если сначала обновить запись пакетной операцией а потом попытаться сохранить ее же обычным способом. Используйте пакетные операции если знаете что делаете.

Answer 2

Нет, только как вы уже написали, через обычный SQL запрос. Entity Framework на то и Entity, что работает с сущностями. Без получения сущности ничего не получится. Но не забудьте потом обновить ваши данные в программе. Тогда у вас тоже получится 2 запроса.

Answer 3

Вот еще нашел способ для кейсов, когда знаешь id удаляемого объекта

var toDelete = new Destination { DestinationId = 2 };
context.Destinations.Attach(toDelete);
context.Destinations.Remove(toDelete);
context.SaveChanges();
READ ALSO
Блок схема foreach

Блок схема foreach

Как изобразить на блок схему цикл foreach?

1847
JSON как правильно распарсить

JSON как правильно распарсить

Как правильно распарсить

384
Есть ли реализация на c# гост р34.11-2012?

Есть ли реализация на c# гост р34.11-2012?

Где найти реализацию госта 3411-2012 для подсчета контрольной суммы файла

362