powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / пакетное удаление
62 сообщений из 62, показаны все 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
пакетное удаление
    #38513645
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонМСУПарамон, код в студию.
Выше давал, один в один. Ты сам то пробовал или фантазируешь?
Учи матчасть, твой гавнокод никуда не годится. Зачем материализация, зачем предварительно селектировать, тем более SELECT * FORM? Прикинь, так блобы будут - ты сначале выберешь записи, а потом удалишь. Нужно делать через Attach, о чем выше писал хвост. Я думал, ты честно через Attach + RemoveRange делаешь.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513646
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уж лучше context.Database.ExecuteSqlCommand юзать, чем такую жесть. Если нужна типизация: http://codearticles.ru/articles/914
Так это будет честное удаление без материализации.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513657
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНужно делать через Attach, о чем выше писал хвост.
Ага, я видел что он писал ))

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

А в общем должно и с Attach работать, не могу сейчас проверить.

МСУПрикинь, так блобы будут - ты сначале выберешь записи, а потом удалишь.
Вот не нужно опять страшилки рассказывать, какой вменяемый человек вообще эти блобы в базу пихает )
Как я и сказал, прекрасно подходит для небольшого количества данных.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513661
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонМСУНужно делать через Attach, о чем выше писал хвост.
Ага, я видел что он писал ))
Как ни странно, он абсолютно прав :)

ПарамонА в общем должно и с Attach работать, не могу сейчас проверить.
С Attach будет работать, как я уже писал. Но есть 2 тонкости. Трансляция в SQL будет одной командой sp_executesql + delete на одну запись, а не delete from where. Во-вторых, если при удалении записи её по какой-то случайности уже не стало, будет исключение. Таким образом, у тебя откатится вся транзакция и пакет не удалится.

ПарамонВот не нужно опять страшилки рассказывать, какой вменяемый человек вообще эти блобы в базу пихает )
А куда их пихать?

ПарамонКак я и сказал, прекрасно подходит для небольшого количества данных.
Да не подходит оно не куда. Гавно, а не решение.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513665
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУКак ни странно, он абсолютно прав :)

Значит материализация нужна )

МСУТрансляция в SQL будет одной командой sp_executesql + delete на одну запись, а не delete from where.

Тоже самое транслирует и после селекта, и все ок.

МСУА куда их пихать?

В папку )
...
Рейтинг: 0 / 0
пакетное удаление
    #38513678
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонЗначит материализация нужна )
Ну значит загружай 100500 записей с блобами, а потом их удаляй.

ПарамонТоже самое транслирует и после селекта, и все ок.
Какого селекта?

ПарамонМСУА куда их пихать?

В папку )
Учи матчасть и читай рекомендации MS по хранению файлов :)
...
Рейтинг: 0 / 0
пакетное удаление
    #38513685
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУУчи матчасть и читай рекомендации MS по хранению файлов :)
Ничего интересного )
Читай их рекомендации по работе с EF, еще хуже ))
...
Рейтинг: 0 / 0
пакетное удаление
    #38513688
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонМСУУчи матчасть и читай рекомендации MS по хранению файлов :)
Ничего интересного )
Читай их рекомендации по работе с EF, еще хуже ))
Говоришь загадками
...
Рейтинг: 0 / 0
пакетное удаление
    #38513832
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТрансляция в SQL будет одной командой sp_executesql + delete на одну запись, а не delete from where.

при работе с ORM, приходится полностью пересмотреть свои взгляды на работу с данными. никого же не парит в какой ASM транслируется IL? так почему должно парить при работе с базой данных? грохать сотнями тысяч записей одним запросом весьма типично для реляционной базы данных. но совершенно не типично для бизнес-логики. такое просачивание старых болячек в виде ненужных расширений для EF и проталкивания SQL-я в СУБД ни к чему хорошему не ведёт, лишь демонстрирует наличие проблемы в архитектуре модели данных.

чтобы прийти к более высокому уровню абстракции (не потеряв при этом в производительности), всё вяжется к корням аггрегации, максимально нормализуется, большие блобы выносятся в отдельные "несущие" классы (и, соответственно, таблицы БД). и не возникает никакой необходимости парить массивы данных, ломая голову как же это "красивенько так сделать".
...
Рейтинг: 0 / 0
пакетное удаление
    #38513857
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttпри работе с ORM, приходится полностью пересмотреть свои взгляды на работу с данными.
Глупости, ничего пересматривать не нужно. Более того, нужно понимать, во что транслируется тот или иной ef-запрос. И если выхлоп не совсем граничит с разумность, нужно вручную задать запрос и воспользоваться штатным маппером. Например, работа с деревьями. EF не умеет работать с CTE, увы. Но это не значит, что мне нужно пересматривать свои взгляды. Вот вариант http://codearticles.ru/articles/2147
Да, в данном случае мы потеряли типизацию, но это не так страшно в единичных случаях. Пусть 90% кода будет покрываться штатными возможностями ORM, остальное - специфика, от которой никуда не уйти. Это нормально.

hVosttгрохать сотнями тысяч записей одним запросом весьма типично для реляционной базы данных. но совершенно не типично для бизнес-логики.
Сотни тысяч - да, сотня - почему нет. Сегодня сотня, завтра тысяча. Я не вижу противоречий и не вижу реальной проблемы, исходя из которой разработчики EF забили на реализацию. Впрочем, на том же NHibernate можно написать честный hsql.
...
Рейтинг: 0 / 0
пакетное удаление
    #38513921
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУГлупости, ничего пересматривать не нужно.

учитывая постоянно возникающие одни и те же вопросы — ещё как нужно.

МСУБолее того, нужно понимать, во что транслируется тот или иной ef-запрос.

Нет. Работать с ОРМ и заморачиваться с SQL — вочинка не стоит выделенки. При возникновении узких мест, профилирование и оптимизация, да. На уровне доступа к данным могут появится хардкоженные SQL-запросы. Но это уже показатель низкого качества архитектуры данных.

МСУНапример, работа с деревьями. EF не умеет работать с CTE, увы.

Чёй-то? Создаётся СТЕ-вьюха, мапится на служебный DTO-класс, и получаем кристально чистую работу с деревьями без единой буквы SQL в коде.

МСУВот вариант http://codearticles.ru/articles/2147 Да, в данном случае мы потеряли типизацию, но это не так страшно в единичных случаях.

См. выше. Никаких SqlQuery! Ничего мы не теряем, учимся грамотно использовать EF.

МСУПусть 90% кода будет покрываться штатными возможностями ORM, остальное - специфика, от которой никуда не уйти.

Такая специфика существует. Но отнюдь не 10%. Может 1% не больше. Например Full Text Search и прочее вендорные плюшке.

МСУСотни тысяч - да, сотня - почему нет. Сегодня сотня, завтра тысяча. Я не вижу противоречий и не вижу реальной проблемы, исходя из которой разработчики EF забили на реализацию. Впрочем, на том же NHibernate можно написать честный hsql.

Давай так. Я приведу пару примеров, с решением без всяких SQL, а ты приведёшь приближённый к реальности пример задачи, где без SQL никак?

Пример 1. Про массовый DELETE. Существует биллинг с записями больше сотни тысяч в день. Существует задача подчистки записей старше 30 дней раз в конце деня (к примеру). Классический реляционный стиль: delete from blabla where dt > @lastDate ну или типо того. На EF без выкрутасов не выполнимо. Решение очевидное и простое. Таблица с днями биллинга, к каждой записи дня вяжется хоть милльён записей за этот день. Грохается одним элементарным Remove().

Пример 2. Про тяжёлые BLOB. В базе данных хранятся картинки, вместе с содержимым в блобах. Классический стиль -- запхать всё в одну таблицу и сидеть с довольной мордной. Правильно: блоб вывести в отдельную таблицу типа ImageContent. Преимущества: материализация записей с картинками не тянет за собой увесистые блобы, и кроме того запись картинки больше не зависит от способа хранения. ("виртуальность" в данных).

Я вижу только профит в том, чтобы максимально избавиться от зависимости от базы данных. Даже если это исошный SQL. Не ровен час, заказчику приспичит все срочно переделать на NoSQL
...
Рейтинг: 0 / 0
пакетное удаление
    #38513972
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУГлупости, ничего пересматривать не нужно.
учитывая постоянно возникающие одни и те же вопросы — ещё как нужно.
У меня постоянно вопросы не возникают. Зачем мне это нужно? Проблема не в пересмотре, а в опыте. Если я вижу, что код ORM не оптимален, я использую штатные средства СУБД. А это примерно 10% всех манипуляций с БД, как видим ORM достаточно много покрывает рутинных работ.

hVosttМСУБолее того, нужно понимать, во что транслируется тот или иной ef-запрос.
Нет. Работать с ОРМ и заморачиваться с SQL — вочинка не стоит выделенки. При возникновении узких мест, профилирование и оптимизация, да. На уровне доступа к данным могут появится хардкоженные SQL-запросы. Но это уже показатель низкого качества архитектуры данных.
Да, и еще 10 раз да. Только полное понимание транслированного запроса. Бездумно писать ef-запросы ведет к деградации личности и непонимании принципов работы с БД. Хардкоженные запросы не так страшны, если они к месту. Некоторые их оборачивают вьюхами и хп, но это на любителя. ORM так или иначе используется.

hVosttМСУНапример, работа с деревьями. EF не умеет работать с CTE, увы.
Чёй-то? Создаётся СТЕ-вьюха, мапится на служебный DTO-класс, и получаем кристально чистую работу с деревьями без единой буквы SQL в коде.
Так это не работа EF с CTE, а работа EF с вьюхой. Это разные вещи. А реально бы хотелось трансляцию CTE, как это умеет делать NH. Да и объектов в БД будет меньше, это плюс.

МСУВот вариант http://codearticles.ru/articles/2147 Да, в данном случае мы потеряли типизацию, но это не так страшно в единичных случаях.

hVosttСм. выше. Никаких SqlQuery! Ничего мы не теряем, учимся грамотно использовать EF.
См. выше. Мне не нужны лишние объекты в БД. Да и не всегда вьюхой можно решить проблему и без функции / хп не обойтись. А нужно ли оно, другой вопрос.

hVosttМСУПусть 90% кода будет покрываться штатными возможностями ORM, остальное - специфика, от которой никуда не уйти.
Такая специфика существует. Но отнюдь не 10%. Может 1% не больше. Например Full Text Search и прочее вендорные плюшке.
Для хеллоуворлдов 1%, для реальных систем 10%. Есть куча специфичных запросов, когда без них не обойтись.

hVosttДавай так. Я приведу пару примеров, с решением без всяких SQL, а ты приведёшь приближённый к реальности пример задачи, где без SQL никак?
Ок.

hVosttПример 1. Про массовый DELETE. Существует биллинг с записями больше сотни тысяч в день. Существует задача подчистки записей старше 30 дней раз в конце деня (к примеру). Классический реляционный стиль: delete from blabla where dt > @lastDate ну или типо того. На EF без выкрутасов не выполнимо. Решение очевидное и простое. Таблица с днями биллинга, к каждой записи дня вяжется хоть милльён записей за этот день. Грохается одним элементарным Remove().
Сразу двойка. Никакими EF тут не пахнет, это чистой воды SSIS пакет (DTS, BizTalk оркестрарий и т.п.) на джобе. Воркфлоу отрабатывает биллинговые данные согласно оркестровки. Твой опыт в подобных задачах - как на ладони :)

hVosttПример 2. Про тяжёлые BLOB. В базе данных хранятся картинки, вместе с содержимым в блобах. Классический стиль -- запхать всё в одну таблицу и сидеть с довольной мордной. Правильно: блоб вывести в отдельную таблицу типа ImageContent. Преимущества: материализация записей с картинками не тянет за собой увесистые блобы, и кроме того запись картинки больше не зависит от способа хранения. ("виртуальность" в данных).
Вопросы хранения данных и архитектура хранилища никак не должны зависить от способов материализации чего-то там. EF у тебя или NH - это твои проблемы, архитектору и DB девелоперам по-барабану, как ты это будешь материализовывать. Ничего делить не нужно, не вижу сложностей в блобе конкретной таблицы. На EF просто не нужно его выбирать. И вообще, SELECT * FROM - это жутчайшее зло.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514103
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,авторSELECT * FROM - это жутчайшее зло
а что ефим транслирует со звездой? я думал согласно маппингу типа..... - ну и долпоеп этот ефим ))
я в общем то согласен с хвостом, если не нормализованным архитекторам баз пофиг, ничего проще создать
составной тип, или блоб по запросу ( а ля отдельная таблица) не хочу что бы в кеше разный хлам таскался...
...
Рейтинг: 0 / 0
пакетное удаление
    #38514121
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиа что ефим транслирует со звездой? я думал согласно маппингу типа..... - ну и долпоеп этот ефим ))
Как напишешь, так и будет транслировать.

Где-то в степия в общем то согласен с хвостом, если не нормализованным архитекторам баз пофиг, ничего проще создать
составной тип, или блоб по запросу ( а ля отдельная таблица) не хочу что бы в кеше разный хлам таскался...
Вообще задача и выеденного яйца не стоит. Оба варианта приемлемы.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514322
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНичего делить не нужно, не вижу сложностей в блобе конкретной таблицы. На EF просто не нужно его выбирать.

видна как на ладони старая школа, по книгам 90-х годов
выбирать поля при работе с ОРМ -- зло. объект он или целый, или никакой вообще. иного не дано. остальное моветон.

МСУСразу двойка. Никакими EF тут не пахнет, это чистой воды SSIS пакет (DTS, BizTalk оркестрарий и т.п.) на джобе.

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

МСУВопросы хранения данных и архитектура хранилища никак не должны зависить от способов материализации чего-то там.

вот именно! поэтому всё выше сказанное -- типичное противоречие самому себе. с базой данных работает только менеджеры баз данных. работать надо не с базой, а данными. у тебя получается наоборот.

МСУБездумно писать ef-запросы ведет к деградации личности и непонимании принципов работы с БД.

вот это я вообще не понял. что значит бездумно писать ef-запросы? принципы работы с БД -- вот что развращает. реляционная природа у данных только в СУБД. для прикладного приложения есть объекты. ты работаешь с базой данных, а я с бизнес-моделью.

ты думаешь, что в EF не добавили групповой Remove/Update потому что им тяжело было? или некогда? или не до этого им? почему? все эти наезды типо в NH это уже давно есть, а МС так и не удосужится прикрутить... этих механизмов там быть попросту не должно быть. изначально они там нафиг не сдались. а почему, похоже, пока до некоторых не доходит

иная концепция работы с данными, как объектной моделью. а не как с табличными данными. все эти DELETE FROM WHERE -- истинное зло. не вызывает эксепшенов -- зло. не даёт понимание что же все таки произошло и какие конкретно записи удалились. потеря контекста (его просто надо перестраивать заново). зло. зло. зло.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514334
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Брехня!

ПС. DELETE FROM ... вызывает дожрена эксепшинов. Базу данных правильно сделай.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514342
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТак это не работа EF с CTE, а работа EF с вьюхой. Это разные вещи. А реально бы хотелось трансляцию CTE, как это умеет делать NH. Да и объектов в БД будет меньше, это плюс.

CTE это понятие, уместное только при реляционном подходе. что конкретно требуется от CTE, это получить уровень и "путешествие" вверх/вниз по дереву. обычная вьюха прекрасно справляется с этой задачей. просто великолепно. а EF работает с объектами. ничего другого он не понимает и не должен понимать. вьюха там или таблица, или табличная функция -- по барабану. это кортеж данных. всё

NH просто делала разношёрстная толпа, которая по максимуму напихала туда всё, чтобы удовлетворить всех и каждого. EF же реализует SOLID-ный подход к решению очень чётко определённой задачи. а начинающие ребята (или олд скул) хотят продолжать ковыряться в базе с помощью SQL-я. в таком случае EF -- не больше чем банальный маппер. но это не так. это целая абстракция. и любая дыра, даже маленькая в 10% выльется в лужу проблем. кто хочет и способен удержать всё под постоянным строгим контролем, та ради бога.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514343
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergehVostt,

Брехня!

ПС. DELETE FROM ... вызывает дожрена эксепшинов. Базу данных правильно сделай.

да ладно!
...
Рейтинг: 0 / 0
пакетное удаление
    #38514359
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЕсли я вижу, что код ORM не оптимален, я использую штатные средства СУБД. А это примерно 10% всех манипуляций с БД, как видим ORM достаточно много покрывает рутинных работ.

и да, в этом я согласен. не всегда ORM оптимален, и узкие места могут потребовать переписать кусок кода с низкоуровневым подходом. такие места -- показатель для грядущего рефакторинга. но сие имеет место быть. спору нет. опять же, в следствие не достаточной проработанности ORM. но EF не стоит на месте, активно развивается. я слежу за тем, какой SQL код генерирует EF, и не всегда он мне нравится. по сравнению с 4-ой версией, в 6-ой качество отображения выросло. практически 95% устраивает вполне, на 4% можно закрыть глаза (просада не значительная), а 1% бывает, что требует проработки.

конечно, мир не идеален.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514533
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
меня EF6 не порадовал скоростью, они сами выпустил патч 6.0.2, чтоб исправить проблемы с материализацией. а тут уже 6.1 в альфе появилось.
п.с. пока сижу на 5 версии и бед не знаю.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514564
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttвидна как на ладони старая школа, по книгам 90-х годов
В старых школах не было упоминания про ORM, так что опять мимо, студент.

hVosttвыбирать поля при работе с ОРМ -- зло. объект он или целый, или никакой вообще. иного не дано. остальное моветон.
Ну вот чушь когда прекратишь писать? Серьезно, твои бредни читать невозможно...

Код: c#
1.
.Select(d => new { d.EmployeeId, d.FullName })



Всё. А как ты потом это вмапишь в объекты - базу не колышит. А вмапить можно 100500 способами. Учи матчасть, знакок ORM мля...

hVosttппц. я те про фому, ты мне по ерёму. разве шёл разговор про то, какой инструмент тут подойдёт лучше? я тебе про пример реализации. а ты так и не ответил.
Я всё ответил. Для оптимизации есть SQL, его и бери. Если нативная трансляция устраивает, за ней приоритет. Всё просто, не нужно ничего выдумывать.

hVosttМСУВопросы хранения данных и архитектура хранилища никак не должны зависить от способов материализации чего-то там.
вот именно! поэтому всё выше сказанное -- типичное противоречие самому себе. с базой данных работает только менеджеры баз данных. работать надо не с базой, а данными. у тебя получается наоборот.
В чем именно противоречие? И что такое "менеджеры баз данных"? С базой данных работают приложения, а никакие не менеджеры. Структура базы не должна зависеть ни от каких ORM и прочего. У базы могут быть 100500 клиентов, даже на разных языках.

hVosttМСУБездумно писать ef-запросы ведет к деградации личности и непонимании принципов работы с БД.
вот это я вообще не понял. что значит бездумно писать ef-запросы? принципы работы с БД -- вот что развращает. реляционная природа у данных только в СУБД. для прикладного приложения есть объекты. ты работаешь с базой данных, а я с бизнес-моделью.
Это значит, что нужно понимать 100% во что транслируется ef-запрос. Если этого понимания нет, ORM противопоказана. ORM для тех, кто понимает, что такое SQL.

hVosttты думаешь, что в EF не добавили групповой Remove/Update потому что им тяжело было? или некогда? или не до этого им? почему? все эти наезды типо в NH это уже давно есть, а МС так и не удосужится прикрутить... этих механизмов там быть попросту не должно быть. изначально они там нафиг не сдались. а почему, похоже, пока до некоторых не доходит
EF уже очень долго пилится, в начальных версиях это было вообще УГ. И все мы юзали L2S или хибер. Пока ты под столом пешком ходил. Может когда-то и добавят в EF фичу, но суть не об этом.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514572
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМСУТак это не работа EF с CTE, а работа EF с вьюхой. Это разные вещи. А реально бы хотелось трансляцию CTE, как это умеет делать NH. Да и объектов в БД будет меньше, это плюс.
CTE это понятие, уместное только при реляционном подходе.
Ты чё несешь, какой реляционный подход? CTE - это рекурсия

hVosttчто конкретно требуется от CTE, это получить уровень и "путешествие" вверх/вниз по дереву. обычная вьюха прекрасно справляется с этой задачей. просто великолепно. а EF работает с объектами. ничего другого он не понимает и не должен понимать. вьюха там или таблица, или табличная функция -- по барабану. это кортеж данных. всё
Ты понимаешь разницу между вьюхой и табличной функцией или хп? Только подумай, не торопись с ответом.

hVosttNH просто делала разношёрстная толпа, которая по максимуму напихала туда всё, чтобы удовлетворить всех и каждого. EF же реализует SOLID-ный подход к решению очень чётко определённой задачи. а начинающие ребята (или олд скул) хотят продолжать ковыряться в базе с помощью SQL-я. в таком случае EF -- не больше чем банальный маппер. но это не так. это целая абстракция. и любая дыра, даже маленькая в 10% выльется в лужу проблем. кто хочет и способен удержать всё под постоянным строгим контролем, та ради бога.
Мля, какой SOLID... Пипец, ты инопланетянен Серьезно, хватит пороть чушь в тех вещах, в которых не разбираешься. Иначе опять будет стыдно, как в случае LINQ Expression. Не неси ересь. EF это не маппер, это ORM. Маппера у меня в рецептах валяются, поделки на 3 строки кода.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514609
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttвыбирать поля при работе с ОРМ -- зло. объект он или целый, или никакой вообще. иного не дано. остальное моветон.

Объекта в реляционной базе вообще не существует, он склеивается из кучи связанных таблиц, под нужды представления. ОРМ это OOП кривовато натянутое на реляционную модель данных.
Глупо проектировать базу исходя из ограничений ОРМ, нужно думать о нуждах бизнеса а не нуждах ОРМ.

hVosttты думаешь, что в EF не добавили групповой Remove/Update потому что им тяжело было? или некогда? или не до этого им? почему?

Думаю, что они пытаются навязать определенный подход, и продвигать свои идеи, им за это платят )
Не факт, что нужно подхватывать знамя и шагать в первых рядах )

Пятница, нужно вбрасывать )
...
Рейтинг: 0 / 0
пакетное удаление
    #38514617
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt в таком случае EF -- не больше чем банальный маппер. но это не так. это целая абстракция
Объектно Реляционный банальный Маппер ))
...
Рейтинг: 0 / 0
пакетное удаление
    #38514624
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУИ все мы юзали L2S или хибер. Пока ты под столом пешком ходил. Может когда-то и добавят в EF фичу, но суть не об этом.

уморил


МСУЭто значит, что нужно понимать 100% во что транслируется ef-запрос. Если этого понимания нет, ORM противопоказана. ORM для тех, кто понимает, что такое SQL.

если ты не понимаешь, в какой ASM компилется твой C#, фуфло ты, а не программер. серьезно. примерно тоже самое ты мне хочешь сказать. без каких-либо обоснований, да?

МСУEF уже очень долго пилится, в начальных версиях это было вообще УГ.

УГ оно было, пока было тупым маппером, основанным на схеме базы данных. потом наконец пошли в правильном направлении. когда потихоньку стало доходить, что работать надо с моделью, а не с таблицами.

МСУСтруктура базы не должна зависеть ни от каких ORM и прочего. У базы могут быть 100500 клиентов, даже на разных языках.

ппц, с фига ли?? что вообще за бред ты несешь, сам хоть понимаешь что мелешь? может ну его вообще нафиг писать какое-то ПО? пусть СУБД сама всё делает? чо мы паримся...

ну ты как ляпнешь феерически сказочную глупость, хоть стой хоть падай.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514625
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонОбъектно Реляционный банальный Маппер ))

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

Код: c#
1.
.Select(d => new { d.EmployeeId, d.FullName })




Всё. А как ты потом это вмапишь в объекты - базу не колышит. А вмапить можно 100500 способами. Учи матчасть, знакок ORM мля...

подумай ещё разок, а? о чем речь. не о возможности состряпать селект с полями. а об оперировании объектами. ты предлагал выше получить объект "без блобов", выбрав конкретные поля, но это будет непонятные "пол объекта", что есть моветон.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514637
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТы чё несешь, какой реляционный подход? CTE - это рекурсия

откуда упал, признавайся? если со стула, то довольно низко, чтобы бред такой нести. ну отожги что-нибудь ещё. скажи ещё, что СТЕ - это три буквы!
...
Рейтинг: 0 / 0
пакетное удаление
    #38514644
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУТы понимаешь разницу между вьюхой и табличной функцией или хп? Только подумай, не торопись с ответом.

и при чем тут разница между ними?

МСУEF это не маппер, это ORM.

ох ты ж ё... Object-relational mapping is not mapping...

не о буквах и названиях речь.
...
Рейтинг: 0 / 0
пакетное удаление
    #38514647
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонОбъекта в реляционной базе вообще не существует, он склеивается из кучи связанных таблиц, под нужды представления. ОРМ это OOП кривовато натянутое на реляционную модель данных.
Глупо проектировать базу исходя из ограничений ОРМ, нужно думать о нуждах бизнеса а не нуждах ОРМ.

золотые слова. только ОРМ это не ООП, хотя наследование там есть. вы в любом случае будете работать с данными. только с какими? до какой степени можно абстрагировать доменную модель? какое влияние на модель оказывает реляционный способ хранения данных?

ПарамонДумаю, что они пытаются навязать определенный подход, и продвигать свои идеи, им за это платят )
Не факт, что нужно подхватывать знамя и шагать в первых рядах )

да они постоянно что-то нам навязывают. а мы с ними боремся. боролись и будем бороться! говнокод -- наш ответ!
...
Рейтинг: 0 / 0
пакетное удаление
    #38514652
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кажется, что это я один здесь не понимаю, что EF нужен только для генерации SQL, и отображения таблиц в классы. нужно знать какой SQL генерит EF и жестко это контролировать. а ещё, так как MS не добавила "нужных фич", пропихивать в СУБД какой хош SQL, благо для этого есть отдельная функция...
...
Рейтинг: 0 / 0
пакетное удаление
    #38514665
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, ефим - это реинкарнированный типизированный датасет
...
Рейтинг: 0 / 0
пакетное удаление
    #38514669
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttесли ты не понимаешь, в какой ASM компилется твой C#, фуфло ты, а не программер. серьезно. примерно тоже самое ты мне хочешь сказать. без каких-либо обоснований, да?
Дурик, не ASM, а MSIL Зачем передергивать и сравнивать кобылу с хвостом? Кобыла - это фрейморк, хвост - это ORM.

hVosttУГ оно было, пока было тупым маппером, основанным на схеме базы данных. потом наконец пошли в правильном направлении. когда потихоньку стало доходить, что работать надо с моделью, а не с таблицами.
EF никогда не было маппером, хватит уже чушь нести. Забудь это слово, если не понимаешь его сути.

hVosttМСУСтруктура базы не должна зависеть ни от каких ORM и прочего. У базы могут быть 100500 клиентов, даже на разных языках.
ппц, с фига ли?? что вообще за бред ты несешь, сам хоть понимаешь что мелешь? может ну его вообще нафиг писать какое-то ПО? пусть СУБД сама всё делает? чо мы паримся...
Ты в вакууме. Что значит нафига? Причем тут ORM и конечная БД? С какого перепуга БД должна подстраиваться под заморочки ORM?

hVosttну ты как ляпнешь феерически сказочную глупость, хоть стой хоть падай.
Без комментариев даже. Когда повзрослеешь, перечитай свои выбросы. Самому смешно будет.

hVosttМСУНу вот чушь когда прекратишь писать? Серьезно, твои бредни читать невозможно...

Код: c#
1.
.Select(d => new { d.EmployeeId, d.FullName })




Всё. А как ты потом это вмапишь в объекты - базу не колышит. А вмапить можно 100500 способами. Учи матчасть, знакок ORM мля...

подумай ещё разок, а? о чем речь. не о возможности состряпать селект с полями. а об оперировании объектами. ты предлагал выше получить объект "без блобов", выбрав конкретные поля, но это будет непонятные "пол объекта", что есть моветон.
Оперировать объектами - это не значит высасывать их полностью из БД. Объект - это ООП термин. Он может быть любой. А за SELECT * FROM нужно пороть плетью по жопе.

hVosttМСУТы чё несешь, какой реляционный подход? CTE - это рекурсия

откуда упал, признавайся? если со стула, то довольно низко, чтобы бред такой нести. ну отожги что-нибудь ещё. скажи ещё, что СТЕ - это три буквы!
Может в сад?

http://technet.microsoft.com/ru-ru/library/ms170355(v=sql.90).aspx Выражения CTE позволяют применять рекурсивные запросы, а их использование вместо временных таблиц и представлений может упростить логику обработки.



hVosttМСУТы понимаешь разницу между вьюхой и табличной функцией или хп? Только подумай, не торопись с ответом.
и при чем тут разница между ними?
Притом, что могут потребоваться входные параметры, как минимум.

hVosttМСУEF это не маппер, это ORM.

ох ты ж ё... Object-relational mapping is not mapping...

не о буквах и названиях речь.

http://ru.wikipedia.org/wiki/ORM Технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных»

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

Объекты есть, наследование есть, ооп нет, жаль. ))

hVosttкакое влияние на модель оказывает реляционный способ хранения данных?

Модель это кучка классов в схеме, или нечто более глубокое, типа логика бизнеса в голове тупого заказчика?

hVosttкажется, что это я один здесь не понимаю, что EF нужен только для генерации SQL, и отображения таблиц в классы. нужно знать какой SQL генерит EF и жестко это контролировать. а ещё, так как MS не добавила "нужных фич", пропихивать в СУБД какой хош SQL, благо для этого есть отдельная функция...
Конечно, у нас теперь code first, и мы делаем модель вообще без базы, на кой она нам, теперь всем рулит модель, она и базу создаст и грохнет если нужно. Все эти связи и констреинты в топку, всех не согласных, да и команду ms sql к стенке. Вот тогда заживем, наконец-то без говнокода. ))
...
Рейтинг: 0 / 0
пакетное удаление
    #38514777
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тупое говно ваша ОРМ
...
Рейтинг: 0 / 0
пакетное удаление
    #38514778
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вы все
...
Рейтинг: 0 / 0
пакетное удаление
    #38514830
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понимаю, что пятница. Банить никого не буду. Но, тему таки закрою.
...
Рейтинг: 0 / 0
62 сообщений из 62, показаны все 3 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / пакетное удаление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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