powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / пакетное удаление
25 сообщений из 62, страница 1 из 3
пакетное удаление
    #38512582
gofffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как через ef удалить группу записей по айди.
...
Рейтинг: 0 / 0
пакетное удаление
    #38512637
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дернуть хранимку, передав ей на вход айди
...
Рейтинг: 0 / 0
пакетное удаление
    #38512656
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
пакетное удаление
    #38512715
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ http://codearticles.ru/articles/2409
http://codearticles.ru/articles/914
http://codearticles.ru/articles/422

сплошное жестянство



gofffffкак через ef удалить группу записей по айди.

через стандартный Remove(), человек, через Remove(). не слушай жестянщиков. и никогда так не делай, как в приведённых выше рецептах.
...
Рейтинг: 0 / 0
пакетное удаление
    #38512716
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя https://github.com/loresoft/EntityFramework.Extended ещё куда ни шло.
всё же это дикий костыль.
...
Рейтинг: 0 / 0
пакетное удаление
    #38512761
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttхотя https://github.com/loresoft/EntityFramework.Extended ещё куда ни шло.
всё же это дикий костыль.
А есть не костыли если надо массово и без материализации (к примеру, интересно стало)? Минус Remove в том что материализовать надо перед удалением, удаление к примеру 100 записей через Remove накладно. Собственно если у меня вставала задача удаления, обновление массовое я использовал https://github.com/loresoft/EntityFramework.Extended либ http://codearticles.ru/articles/2409. Ef из коробки не знает про батчинг если я не ошибаюсь, что печально.
...
Рейтинг: 0 / 0
пакетное удаление
    #38512785
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuА есть не костыли если надо массово и без материализации (к примеру, интересно стало)? Минус Remove в том что материализовать надо перед удалением, удаление к примеру 100 записей через Remove накладно. Собственно если у меня вставала задача удаления, обновление массовое я использовал https://github.com/loresoft/EntityFramework.Extended либ http://codearticles.ru/articles/2409. Ef из коробки не знает про батчинг если я не ошибаюсь, что печально.

EF это ORM. а ORM это взаимодействия с данными в бизнес-логике. 100 записей удалить через Remove совсем не накладно. а вот колбасить огромные массивы данных — вообще не задача ORM и не надо даже пытаться приспособить с помощью костылей его для этого. и ничего тут печального нет.

материализовать таблицы с +100500 полей, некоторые из которых (n)varchar(max) конечно будет накладно. но за такой дизайн базы данных проще лишить горе-проектировщика злополучных конечностей. и нанять вменяемого товарища.
...
Рейтинг: 0 / 0
пакетное удаление
    #38512801
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

кстати, материализация для Remove() не обязательно. подойдёт обычный аттач. и волки целы и овцы сыты.
...
Рейтинг: 0 / 0
пакетное удаление
    #38512831
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttEF это ORM. а ORM это взаимодействия с данными в бизнес-логике. 100 записей удалить через Remove совсем не накладно. а вот колбасить огромные массивы данных — вообще не задача ORM и не надо даже пытаться приспособить с помощью костылей его для этого. и ничего тут печального нет.

материализовать таблицы с +100500 полей, некоторые из которых (n)varchar(max) конечно будет накладно. но за такой дизайн базы данных проще лишить горе-проектировщика злополучных конечностей. и нанять вменяемого товарища.

+100500 полей это крайности, но я не вижу смысла вытаскивать записи из бд, если я хочу их удалить все ли по какому то критерию.
hVosttкстати, материализация для Remove() не обязательно. подойдёт обычный аттач. и волки целы и овцы сыты.

уточни это как при массовом удаление/обновление?
...
Рейтинг: 0 / 0
пакетное удаление
    #38512847
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu+100500 полей это крайности, но я не вижу смысла вытаскивать записи из бд, если я хочу их удалить все ли по какому то критерию.

работая с ОРМ вы не думаете о материализации, и о базе данных. для поддержания целостности, материализация нужна, кеширование опять же, чтобы все не полетело к чертям ради экономии десятков тиков. если идёт речь о пережёвывании массивов данных, то имеет смысл перенести эту работу на уровень низкоуровневой работы с данными (хранимки и прочая подобная ботва).


handmadeFromRuуточни это как при массовом удаление/обновление?

Код: c#
1.
2.
3.
            var entry = new Entry { Id = entryId };
            _dbContext.Entries.Attach(entry);
            _dbContext.Entries.Remove(entry);



никакой материализации не понадобилось. и контекст в курсе, может кеш почистить и целостность при работе логики не нарушается.

но чесслово. я б так делал только после профилирования и обнаружения узких мест, дескать да — потеря производительности хоть как-то ощущается (подобная необходимость обычно — подумать о рефакторинге схемы данных и логики).

т.е. например, вместо того, чтобы грохать сотнями и тысячами записи по условию или ключу, правильно было бы связать эти сотни и тысячи с одной записью, и грохать именно её. остальное умрёт каскадом. типичный случай: есть заявка и позиции заявки. достаточно убить заявку. нафига заниматься ненужной работой? да и вообще. в бизнес-логике такие вещи просто не нужны, а подобные задачи возникают от банального неумения правильно организовать хранение данных. отсюда эти убогие костыли и дурно пахнущие "рецепты".
...
Рейтинг: 0 / 0
пакетное удаление
    #38512943
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массовые операции, балк инсерты и тому подобное, немного выходит за рамки компетенции ORM. Хотя и она может решать такие задачи. Вопрос скорости зависит от объема данных, индексов и прочего. Где-то подойдет и обычный цикл с удалением entity.
P.S. В некоторых случаях не стоит в лоб решать задачу с помощью ORM, это и ежу понятно.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513272
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EF это фактически DAL, но почему его кастрировали, не ясно.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513341
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонEF это фактически DAL, но почему его кастрировали, не ясно.
Почему кастрировали? Возможность выполнить задачу есть. В чем вопрос?
...
Рейтинг: 0 / 0
пакетное удаление
    #38513393
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУВозможность выполнить задачу есть. В чем вопрос?

Выполнить красиво, одной командой, только в слое БЛ, а не гонять циклы и хардкодить запросы, не говоря уже про костыли и левые сборки.

Добавляют, но медленно RemoveRange уже работает )
...
Рейтинг: 0 / 0
пакетное удаление
    #38513407
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gofffffкак через ef удалить группу записей по айди.

Как вариант:
Код: c#
1.
db.Products.RemoveRange(db.Products.Where(t => arrIds.Contains(t.id)));
...
Рейтинг: 0 / 0
пакетное удаление
    #38513467
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонВыполнить красиво, одной командой, только в слое БЛ, а не гонять циклы и хардкодить запросы, не говоря уже про костыли и левые сборки.
Ну, вот одной командой. Вполне красиво и быстро.

Код: c#
1.
context.ExecuteStoreCommand("DELETE FROM Employees Where CustomerId = {0}", customerId);



ПарамонДобавляют, но медленно RemoveRange уже работает )
RemoveRange УГ, он транслирует 100500 команд. Во-вторых, если удаляемого ID нет (кто-то уже удалил), будет исключение. А в случае ExecuteStoreCommand никаких исключений.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513471
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
context.Database.ExecuteSqlCommand("DELETE FROM Test WHERE Id > {0}", 12);



Причем такое запрос будет выполняться в любой БД, весьма кроссплатформенно. Пакуй эту строчку в свой репозиторий и забудь про все проблемы.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513477
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНу, вот одной командой. Вполне красиво и быстро.

Код: c#
1.
context.ExecuteStoreCommand("DELETE FROM Employees Where CustomerId = {0}", customerId);



Тут мы все преимущества EF, а именно компайл тайм проверки, слили и унитаз.

МСУRemoveRange УГ, он транслирует 100500 команд. Во-вторых, если удаляемого ID нет (кто-то уже удалил), будет исключение. А в случае ExecuteStoreCommand никаких исключений.
Для небольших количеств - самое то.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513555
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонМСУНу, вот одной командой. Вполне красиво и быстро.

Код: c#
1.
context.ExecuteStoreCommand("DELETE FROM Employees Where CustomerId = {0}", customerId);



Тут мы все преимущества EF, а именно компайл тайм проверки, слили и унитаз.

МСУRemoveRange УГ, он транслирует 100500 команд. Во-вторых, если удаляемого ID нет (кто-то уже удалил), будет исключение. А в случае ExecuteStoreCommand никаких исключений.
Для небольших количеств - самое то.
1. Выше я дал рецепт, как можно использовать типизированный подход. Лично для меня оба варианта хороши.
2. Даже для одной записи - плохо. Т.к. в момент удаления ее может не быть. А это эксепшен.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513581
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ2. Даже для одной записи - плохо. Т.к. в момент удаления ее может не быть. А это эксепшен.
Нет там никаких эксепшенов, о чем ты?
...
Рейтинг: 0 / 0
пакетное удаление
    #38513599
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонНет там никаких эксепшенов, о чем ты?
Ты вообще понял, про что я говорю?
...
Рейтинг: 0 / 0
пакетное удаление
    #38513607
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,
Нет, я прогнал с записями в базе, потом без записей (стер предварительно), все от работало.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513617
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон, код в студию.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513627
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУПарамон, код в студию.
Выше давал, один в один. Ты сам то пробовал или фантазируешь?
...
Рейтинг: 0 / 0
пакетное удаление
    #38513631
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Текст эксепшена какой?
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 1 из 3
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / пакетное удаление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]