Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
как через ef удалить группу записей по айди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 22:21 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
дернуть хранимку, передав ей на вход айди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 23:24 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
http://codearticles.ru/articles/2409 http://codearticles.ru/articles/914 http://codearticles.ru/articles/422 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 23:56 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУ http://codearticles.ru/articles/2409 http://codearticles.ru/articles/914 http://codearticles.ru/articles/422 сплошное жестянство gofffffкак через ef удалить группу записей по айди. через стандартный Remove(), человек, через Remove(). не слушай жестянщиков. и никогда так не делай, как в приведённых выше рецептах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 02:44 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
хотя https://github.com/loresoft/EntityFramework.Extended ещё куда ни шло. всё же это дикий костыль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 02:46 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVosttхотя https://github.com/loresoft/EntityFramework.Extended ещё куда ни шло. всё же это дикий костыль. А есть не костыли если надо массово и без материализации (к примеру, интересно стало)? Минус Remove в том что материализовать надо перед удалением, удаление к примеру 100 записей через Remove накладно. Собственно если у меня вставала задача удаления, обновление массовое я использовал https://github.com/loresoft/EntityFramework.Extended либ http://codearticles.ru/articles/2409. Ef из коробки не знает про батчинг если я не ошибаюсь, что печально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 08:09 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
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) конечно будет накладно. но за такой дизайн базы данных проще лишить горе-проектировщика злополучных конечностей. и нанять вменяемого товарища. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 09:17 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
handmadeFromRu, кстати, материализация для Remove() не обязательно. подойдёт обычный аттач. и волки целы и овцы сыты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 09:42 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVosttEF это ORM. а ORM это взаимодействия с данными в бизнес-логике. 100 записей удалить через Remove совсем не накладно. а вот колбасить огромные массивы данных — вообще не задача ORM и не надо даже пытаться приспособить с помощью костылей его для этого. и ничего тут печального нет. материализовать таблицы с +100500 полей, некоторые из которых (n)varchar(max) конечно будет накладно. но за такой дизайн базы данных проще лишить горе-проектировщика злополучных конечностей. и нанять вменяемого товарища. +100500 полей это крайности, но я не вижу смысла вытаскивать записи из бд, если я хочу их удалить все ли по какому то критерию. hVosttкстати, материализация для Remove() не обязательно. подойдёт обычный аттач. и волки целы и овцы сыты. уточни это как при массовом удаление/обновление? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 10:14 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
handmadeFromRu+100500 полей это крайности, но я не вижу смысла вытаскивать записи из бд, если я хочу их удалить все ли по какому то критерию. работая с ОРМ вы не думаете о материализации, и о базе данных. для поддержания целостности, материализация нужна, кеширование опять же, чтобы все не полетело к чертям ради экономии десятков тиков. если идёт речь о пережёвывании массивов данных, то имеет смысл перенести эту работу на уровень низкоуровневой работы с данными (хранимки и прочая подобная ботва). handmadeFromRuуточни это как при массовом удаление/обновление? Код: c# 1. 2. 3. никакой материализации не понадобилось. и контекст в курсе, может кеш почистить и целостность при работе логики не нарушается. но чесслово. я б так делал только после профилирования и обнаружения узких мест, дескать да — потеря производительности хоть как-то ощущается (подобная необходимость обычно — подумать о рефакторинге схемы данных и логики). т.е. например, вместо того, чтобы грохать сотнями и тысячами записи по условию или ключу, правильно было бы связать эти сотни и тысячи с одной записью, и грохать именно её. остальное умрёт каскадом. типичный случай: есть заявка и позиции заявки. достаточно убить заявку. нафига заниматься ненужной работой? да и вообще. в бизнес-логике такие вещи просто не нужны, а подобные задачи возникают от банального неумения правильно организовать хранение данных. отсюда эти убогие костыли и дурно пахнущие "рецепты". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 10:34 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
Массовые операции, балк инсерты и тому подобное, немного выходит за рамки компетенции ORM. Хотя и она может решать такие задачи. Вопрос скорости зависит от объема данных, индексов и прочего. Где-то подойдет и обычный цикл с удалением entity. P.S. В некоторых случаях не стоит в лоб решать задачу с помощью ORM, это и ежу понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 12:18 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
EF это фактически DAL, но почему его кастрировали, не ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 15:32 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонEF это фактически DAL, но почему его кастрировали, не ясно. Почему кастрировали? Возможность выполнить задачу есть. В чем вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 16:18 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУВозможность выполнить задачу есть. В чем вопрос? Выполнить красиво, одной командой, только в слое БЛ, а не гонять циклы и хардкодить запросы, не говоря уже про костыли и левые сборки. Добавляют, но медленно RemoveRange уже работает ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 16:50 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
gofffffкак через ef удалить группу записей по айди. Как вариант: Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 16:55 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонВыполнить красиво, одной командой, только в слое БЛ, а не гонять циклы и хардкодить запросы, не говоря уже про костыли и левые сборки. Ну, вот одной командой. Вполне красиво и быстро. Код: c# 1. ПарамонДобавляют, но медленно RemoveRange уже работает ) RemoveRange УГ, он транслирует 100500 команд. Во-вторых, если удаляемого ID нет (кто-то уже удалил), будет исключение. А в случае ExecuteStoreCommand никаких исключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 17:52 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
Код: c# 1. Причем такое запрос будет выполняться в любой БД, весьма кроссплатформенно. Пакуй эту строчку в свой репозиторий и забудь про все проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 17:57 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУНу, вот одной командой. Вполне красиво и быстро. Код: c# 1. Тут мы все преимущества EF, а именно компайл тайм проверки, слили и унитаз. МСУRemoveRange УГ, он транслирует 100500 команд. Во-вторых, если удаляемого ID нет (кто-то уже удалил), будет исключение. А в случае ExecuteStoreCommand никаких исключений. Для небольших количеств - самое то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 18:01 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонМСУНу, вот одной командой. Вполне красиво и быстро. Код: c# 1. Тут мы все преимущества EF, а именно компайл тайм проверки, слили и унитаз. МСУRemoveRange УГ, он транслирует 100500 команд. Во-вторых, если удаляемого ID нет (кто-то уже удалил), будет исключение. А в случае ExecuteStoreCommand никаких исключений. Для небольших количеств - самое то. 1. Выше я дал рецепт, как можно использовать типизированный подход. Лично для меня оба варианта хороши. 2. Даже для одной записи - плохо. Т.к. в момент удаления ее может не быть. А это эксепшен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 19:55 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУ2. Даже для одной записи - плохо. Т.к. в момент удаления ее может не быть. А это эксепшен. Нет там никаких эксепшенов, о чем ты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 20:26 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонНет там никаких эксепшенов, о чем ты? Ты вообще понял, про что я говорю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:01 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУ, Нет, я прогнал с записями в базе, потом без записей (стер предварительно), все от работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:11 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
Парамон, код в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:28 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУПарамон, код в студию. Выше давал, один в один. Ты сам то пробовал или фантазируешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:39 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУ, Текст эксепшена какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 21:46 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонМСУПарамон, код в студию. Выше давал, один в один. Ты сам то пробовал или фантазируешь? Учи матчасть, твой гавнокод никуда не годится. Зачем материализация, зачем предварительно селектировать, тем более SELECT * FORM? Прикинь, так блобы будут - ты сначале выберешь записи, а потом удалишь. Нужно делать через Attach, о чем выше писал хвост. Я думал, ты честно через Attach + RemoveRange делаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:17 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
Уж лучше context.Database.ExecuteSqlCommand юзать, чем такую жесть. Если нужна типизация: http://codearticles.ru/articles/914 Так это будет честное удаление без материализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:19 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУНужно делать через Attach, о чем выше писал хвост. Ага, я видел что он писал )) hVosttработая с ОРМ вы не думаете о материализации, и о базе данных. для поддержания целостности, материализация нужна, кеширование опять же, чтобы все не полетело к чертям ради экономии десятков тиков А в общем должно и с Attach работать, не могу сейчас проверить. МСУПрикинь, так блобы будут - ты сначале выберешь записи, а потом удалишь. Вот не нужно опять страшилки рассказывать, какой вменяемый человек вообще эти блобы в базу пихает ) Как я и сказал, прекрасно подходит для небольшого количества данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:35 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонМСУНужно делать через Attach, о чем выше писал хвост. Ага, я видел что он писал )) Как ни странно, он абсолютно прав :) ПарамонА в общем должно и с Attach работать, не могу сейчас проверить. С Attach будет работать, как я уже писал. Но есть 2 тонкости. Трансляция в SQL будет одной командой sp_executesql + delete на одну запись, а не delete from where. Во-вторых, если при удалении записи её по какой-то случайности уже не стало, будет исключение. Таким образом, у тебя откатится вся транзакция и пакет не удалится. ПарамонВот не нужно опять страшилки рассказывать, какой вменяемый человек вообще эти блобы в базу пихает ) А куда их пихать? ПарамонКак я и сказал, прекрасно подходит для небольшого количества данных. Да не подходит оно не куда. Гавно, а не решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:43 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУКак ни странно, он абсолютно прав :) Значит материализация нужна ) МСУТрансляция в SQL будет одной командой sp_executesql + delete на одну запись, а не delete from where. Тоже самое транслирует и после селекта, и все ок. МСУА куда их пихать? В папку ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 22:52 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонЗначит материализация нужна ) Ну значит загружай 100500 записей с блобами, а потом их удаляй. ПарамонТоже самое транслирует и после селекта, и все ок. Какого селекта? ПарамонМСУА куда их пихать? В папку ) Учи матчасть и читай рекомендации MS по хранению файлов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 23:16 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУУчи матчасть и читай рекомендации MS по хранению файлов :) Ничего интересного ) Читай их рекомендации по работе с EF, еще хуже )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 23:30 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонМСУУчи матчасть и читай рекомендации MS по хранению файлов :) Ничего интересного ) Читай их рекомендации по работе с EF, еще хуже )) Говоришь загадками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 23:35 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУТрансляция в SQL будет одной командой sp_executesql + delete на одну запись, а не delete from where. при работе с ORM, приходится полностью пересмотреть свои взгляды на работу с данными. никого же не парит в какой ASM транслируется IL? так почему должно парить при работе с базой данных? грохать сотнями тысяч записей одним запросом весьма типично для реляционной базы данных. но совершенно не типично для бизнес-логики. такое просачивание старых болячек в виде ненужных расширений для EF и проталкивания SQL-я в СУБД ни к чему хорошему не ведёт, лишь демонстрирует наличие проблемы в архитектуре модели данных. чтобы прийти к более высокому уровню абстракции (не потеряв при этом в производительности), всё вяжется к корням аггрегации, максимально нормализуется, большие блобы выносятся в отдельные "несущие" классы (и, соответственно, таблицы БД). и не возникает никакой необходимости парить массивы данных, ломая голову как же это "красивенько так сделать". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 08:26 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVosttпри работе с ORM, приходится полностью пересмотреть свои взгляды на работу с данными. Глупости, ничего пересматривать не нужно. Более того, нужно понимать, во что транслируется тот или иной ef-запрос. И если выхлоп не совсем граничит с разумность, нужно вручную задать запрос и воспользоваться штатным маппером. Например, работа с деревьями. EF не умеет работать с CTE, увы. Но это не значит, что мне нужно пересматривать свои взгляды. Вот вариант http://codearticles.ru/articles/2147 Да, в данном случае мы потеряли типизацию, но это не так страшно в единичных случаях. Пусть 90% кода будет покрываться штатными возможностями ORM, остальное - специфика, от которой никуда не уйти. Это нормально. hVosttгрохать сотнями тысяч записей одним запросом весьма типично для реляционной базы данных. но совершенно не типично для бизнес-логики. Сотни тысяч - да, сотня - почему нет. Сегодня сотня, завтра тысяча. Я не вижу противоречий и не вижу реальной проблемы, исходя из которой разработчики EF забили на реализацию. Впрочем, на том же NHibernate можно написать честный hsql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 09:00 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУГлупости, ничего пересматривать не нужно. учитывая постоянно возникающие одни и те же вопросы — ещё как нужно. МСУБолее того, нужно понимать, во что транслируется тот или иной 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 10:04 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
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 - это жутчайшее зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 10:52 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУ,авторSELECT * FROM - это жутчайшее зло а что ефим транслирует со звездой? я думал согласно маппингу типа..... - ну и долпоеп этот ефим )) я в общем то согласен с хвостом, если не нормализованным архитекторам баз пофиг, ничего проще создать составной тип, или блоб по запросу ( а ля отдельная таблица) не хочу что бы в кеше разный хлам таскался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 12:34 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
Где-то в степиа что ефим транслирует со звездой? я думал согласно маппингу типа..... - ну и долпоеп этот ефим )) Как напишешь, так и будет транслировать. Где-то в степия в общем то согласен с хвостом, если не нормализованным архитекторам баз пофиг, ничего проще создать составной тип, или блоб по запросу ( а ля отдельная таблица) не хочу что бы в кеше разный хлам таскался... Вообще задача и выеденного яйца не стоит. Оба варианта приемлемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 12:45 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУНичего делить не нужно, не вижу сложностей в блобе конкретной таблицы. На EF просто не нужно его выбирать. видна как на ладони старая школа, по книгам 90-х годов выбирать поля при работе с ОРМ -- зло. объект он или целый, или никакой вообще. иного не дано. остальное моветон. МСУСразу двойка. Никакими EF тут не пахнет, это чистой воды SSIS пакет (DTS, BizTalk оркестрарий и т.п.) на джобе. ппц. я те про фому, ты мне по ерёму. разве шёл разговор про то, какой инструмент тут подойдёт лучше? я тебе про пример реализации. а ты так и не ответил. МСУВопросы хранения данных и архитектура хранилища никак не должны зависить от способов материализации чего-то там. вот именно! поэтому всё выше сказанное -- типичное противоречие самому себе. с базой данных работает только менеджеры баз данных. работать надо не с базой, а данными. у тебя получается наоборот. МСУБездумно писать ef-запросы ведет к деградации личности и непонимании принципов работы с БД. вот это я вообще не понял. что значит бездумно писать ef-запросы? принципы работы с БД -- вот что развращает. реляционная природа у данных только в СУБД. для прикладного приложения есть объекты. ты работаешь с базой данных, а я с бизнес-моделью. ты думаешь, что в EF не добавили групповой Remove/Update потому что им тяжело было? или некогда? или не до этого им? почему? все эти наезды типо в NH это уже давно есть, а МС так и не удосужится прикрутить... этих механизмов там быть попросту не должно быть. изначально они там нафиг не сдались. а почему, похоже, пока до некоторых не доходит иная концепция работы с данными, как объектной моделью. а не как с табличными данными. все эти DELETE FROM WHERE -- истинное зло. не вызывает эксепшенов -- зло. не даёт понимание что же все таки произошло и какие конкретно записи удалились. потеря контекста (его просто надо перестраивать заново). зло. зло. зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 15:09 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVostt, Брехня! ПС. DELETE FROM ... вызывает дожрена эксепшинов. Базу данных правильно сделай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 15:14 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУТак это не работа EF с CTE, а работа EF с вьюхой. Это разные вещи. А реально бы хотелось трансляцию CTE, как это умеет делать NH. Да и объектов в БД будет меньше, это плюс. CTE это понятие, уместное только при реляционном подходе. что конкретно требуется от CTE, это получить уровень и "путешествие" вверх/вниз по дереву. обычная вьюха прекрасно справляется с этой задачей. просто великолепно. а EF работает с объектами. ничего другого он не понимает и не должен понимать. вьюха там или таблица, или табличная функция -- по барабану. это кортеж данных. всё NH просто делала разношёрстная толпа, которая по максимуму напихала туда всё, чтобы удовлетворить всех и каждого. EF же реализует SOLID-ный подход к решению очень чётко определённой задачи. а начинающие ребята (или олд скул) хотят продолжать ковыряться в базе с помощью SQL-я. в таком случае EF -- не больше чем банальный маппер. но это не так. это целая абстракция. и любая дыра, даже маленькая в 10% выльется в лужу проблем. кто хочет и способен удержать всё под постоянным строгим контролем, та ради бога. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 15:24 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ShSergehVostt, Брехня! ПС. DELETE FROM ... вызывает дожрена эксепшинов. Базу данных правильно сделай. да ладно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 15:25 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУЕсли я вижу, что код ORM не оптимален, я использую штатные средства СУБД. А это примерно 10% всех манипуляций с БД, как видим ORM достаточно много покрывает рутинных работ. и да, в этом я согласен. не всегда ORM оптимален, и узкие места могут потребовать переписать кусок кода с низкоуровневым подходом. такие места -- показатель для грядущего рефакторинга. но сие имеет место быть. спору нет. опять же, в следствие не достаточной проработанности ORM. но EF не стоит на месте, активно развивается. я слежу за тем, какой SQL код генерирует EF, и не всегда он мне нравится. по сравнению с 4-ой версией, в 6-ой качество отображения выросло. практически 95% устраивает вполне, на 4% можно закрыть глаза (просада не значительная), а 1% бывает, что требует проработки. конечно, мир не идеален. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 15:35 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
меня EF6 не порадовал скоростью, они сами выпустил патч 6.0.2, чтоб исправить проблемы с материализацией. а тут уже 6.1 в альфе появилось. п.с. пока сижу на 5 версии и бед не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 17:33 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVosttвидна как на ладони старая школа, по книгам 90-х годов В старых школах не было упоминания про ORM, так что опять мимо, студент. hVosttвыбирать поля при работе с ОРМ -- зло. объект он или целый, или никакой вообще. иного не дано. остальное моветон. Ну вот чушь когда прекратишь писать? Серьезно, твои бредни читать невозможно... Код: c# 1. Всё. А как ты потом это вмапишь в объекты - базу не колышит. А вмапить можно 100500 способами. Учи матчасть, знакок ORM мля... hVosttппц. я те про фому, ты мне по ерёму. разве шёл разговор про то, какой инструмент тут подойдёт лучше? я тебе про пример реализации. а ты так и не ответил. Я всё ответил. Для оптимизации есть SQL, его и бери. Если нативная трансляция устраивает, за ней приоритет. Всё просто, не нужно ничего выдумывать. hVosttМСУВопросы хранения данных и архитектура хранилища никак не должны зависить от способов материализации чего-то там. вот именно! поэтому всё выше сказанное -- типичное противоречие самому себе. с базой данных работает только менеджеры баз данных. работать надо не с базой, а данными. у тебя получается наоборот. В чем именно противоречие? И что такое "менеджеры баз данных"? С базой данных работают приложения, а никакие не менеджеры. Структура базы не должна зависеть ни от каких ORM и прочего. У базы могут быть 100500 клиентов, даже на разных языках. hVosttМСУБездумно писать ef-запросы ведет к деградации личности и непонимании принципов работы с БД. вот это я вообще не понял. что значит бездумно писать ef-запросы? принципы работы с БД -- вот что развращает. реляционная природа у данных только в СУБД. для прикладного приложения есть объекты. ты работаешь с базой данных, а я с бизнес-моделью. Это значит, что нужно понимать 100% во что транслируется ef-запрос. Если этого понимания нет, ORM противопоказана. ORM для тех, кто понимает, что такое SQL. hVosttты думаешь, что в EF не добавили групповой Remove/Update потому что им тяжело было? или некогда? или не до этого им? почему? все эти наезды типо в NH это уже давно есть, а МС так и не удосужится прикрутить... этих механизмов там быть попросту не должно быть. изначально они там нафиг не сдались. а почему, похоже, пока до некоторых не доходит EF уже очень долго пилится, в начальных версиях это было вообще УГ. И все мы юзали L2S или хибер. Пока ты под столом пешком ходил. Может когда-то и добавят в EF фичу, но суть не об этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 17:54 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVosttМСУТак это не работа EF с CTE, а работа EF с вьюхой. Это разные вещи. А реально бы хотелось трансляцию CTE, как это умеет делать NH. Да и объектов в БД будет меньше, это плюс. CTE это понятие, уместное только при реляционном подходе. Ты чё несешь, какой реляционный подход? CTE - это рекурсия hVosttчто конкретно требуется от CTE, это получить уровень и "путешествие" вверх/вниз по дереву. обычная вьюха прекрасно справляется с этой задачей. просто великолепно. а EF работает с объектами. ничего другого он не понимает и не должен понимать. вьюха там или таблица, или табличная функция -- по барабану. это кортеж данных. всё Ты понимаешь разницу между вьюхой и табличной функцией или хп? Только подумай, не торопись с ответом. hVosttNH просто делала разношёрстная толпа, которая по максимуму напихала туда всё, чтобы удовлетворить всех и каждого. EF же реализует SOLID-ный подход к решению очень чётко определённой задачи. а начинающие ребята (или олд скул) хотят продолжать ковыряться в базе с помощью SQL-я. в таком случае EF -- не больше чем банальный маппер. но это не так. это целая абстракция. и любая дыра, даже маленькая в 10% выльется в лужу проблем. кто хочет и способен удержать всё под постоянным строгим контролем, та ради бога. Мля, какой SOLID... Пипец, ты инопланетянен Серьезно, хватит пороть чушь в тех вещах, в которых не разбираешься. Иначе опять будет стыдно, как в случае LINQ Expression. Не неси ересь. EF это не маппер, это ORM. Маппера у меня в рецептах валяются, поделки на 3 строки кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 17:58 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVosttвыбирать поля при работе с ОРМ -- зло. объект он или целый, или никакой вообще. иного не дано. остальное моветон. Объекта в реляционной базе вообще не существует, он склеивается из кучи связанных таблиц, под нужды представления. ОРМ это OOП кривовато натянутое на реляционную модель данных. Глупо проектировать базу исходя из ограничений ОРМ, нужно думать о нуждах бизнеса а не нуждах ОРМ. hVosttты думаешь, что в EF не добавили групповой Remove/Update потому что им тяжело было? или некогда? или не до этого им? почему? Думаю, что они пытаются навязать определенный подход, и продвигать свои идеи, им за это платят ) Не факт, что нужно подхватывать знамя и шагать в первых рядах ) Пятница, нужно вбрасывать ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 18:29 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVostt в таком случае EF -- не больше чем банальный маппер. но это не так. это целая абстракция Объектно Реляционный банальный Маппер )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 18:42 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУИ все мы юзали L2S или хибер. Пока ты под столом пешком ходил. Может когда-то и добавят в EF фичу, но суть не об этом. уморил МСУЭто значит, что нужно понимать 100% во что транслируется ef-запрос. Если этого понимания нет, ORM противопоказана. ORM для тех, кто понимает, что такое SQL. если ты не понимаешь, в какой ASM компилется твой C#, фуфло ты, а не программер. серьезно. примерно тоже самое ты мне хочешь сказать. без каких-либо обоснований, да? МСУEF уже очень долго пилится, в начальных версиях это было вообще УГ. УГ оно было, пока было тупым маппером, основанным на схеме базы данных. потом наконец пошли в правильном направлении. когда потихоньку стало доходить, что работать надо с моделью, а не с таблицами. МСУСтруктура базы не должна зависеть ни от каких ORM и прочего. У базы могут быть 100500 клиентов, даже на разных языках. ппц, с фига ли?? что вообще за бред ты несешь, сам хоть понимаешь что мелешь? может ну его вообще нафиг писать какое-то ПО? пусть СУБД сама всё делает? чо мы паримся... ну ты как ляпнешь феерически сказочную глупость, хоть стой хоть падай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 18:57 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонОбъектно Реляционный банальный Маппер )) угу... ждал кто же первый про это скажет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 18:59 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУНу вот чушь когда прекратишь писать? Серьезно, твои бредни читать невозможно... Код: c# 1. Всё. А как ты потом это вмапишь в объекты - базу не колышит. А вмапить можно 100500 способами. Учи матчасть, знакок ORM мля... подумай ещё разок, а? о чем речь. не о возможности состряпать селект с полями. а об оперировании объектами. ты предлагал выше получить объект "без блобов", выбрав конкретные поля, но это будет непонятные "пол объекта", что есть моветон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:03 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУТы чё несешь, какой реляционный подход? CTE - это рекурсия откуда упал, признавайся? если со стула, то довольно низко, чтобы бред такой нести. ну отожги что-нибудь ещё. скажи ещё, что СТЕ - это три буквы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:08 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
МСУТы понимаешь разницу между вьюхой и табличной функцией или хп? Только подумай, не торопись с ответом. и при чем тут разница между ними? МСУEF это не маппер, это ORM. ох ты ж ё... Object-relational mapping is not mapping... не о буквах и названиях речь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:14 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
ПарамонОбъекта в реляционной базе вообще не существует, он склеивается из кучи связанных таблиц, под нужды представления. ОРМ это OOП кривовато натянутое на реляционную модель данных. Глупо проектировать базу исходя из ограничений ОРМ, нужно думать о нуждах бизнеса а не нуждах ОРМ. золотые слова. только ОРМ это не ООП, хотя наследование там есть. вы в любом случае будете работать с данными. только с какими? до какой степени можно абстрагировать доменную модель? какое влияние на модель оказывает реляционный способ хранения данных? ПарамонДумаю, что они пытаются навязать определенный подход, и продвигать свои идеи, им за это платят ) Не факт, что нужно подхватывать знамя и шагать в первых рядах ) да они постоянно что-то нам навязывают. а мы с ними боремся. боролись и будем бороться! говнокод -- наш ответ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:22 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
кажется, что это я один здесь не понимаю, что EF нужен только для генерации SQL, и отображения таблиц в классы. нужно знать какой SQL генерит EF и жестко это контролировать. а ещё, так как MS не добавила "нужных фич", пропихивать в СУБД какой хош SQL, благо для этого есть отдельная функция... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:29 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVostt, ефим - это реинкарнированный типизированный датасет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:40 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVosttесли ты не понимаешь, в какой ASM компилется твой C#, фуфло ты, а не программер. серьезно. примерно тоже самое ты мне хочешь сказать. без каких-либо обоснований, да? Дурик, не ASM, а MSIL Зачем передергивать и сравнивать кобылу с хвостом? Кобыла - это фрейморк, хвост - это ORM. hVosttУГ оно было, пока было тупым маппером, основанным на схеме базы данных. потом наконец пошли в правильном направлении. когда потихоньку стало доходить, что работать надо с моделью, а не с таблицами. EF никогда не было маппером, хватит уже чушь нести. Забудь это слово, если не понимаешь его сути. hVosttМСУСтруктура базы не должна зависеть ни от каких ORM и прочего. У базы могут быть 100500 клиентов, даже на разных языках. ппц, с фига ли?? что вообще за бред ты несешь, сам хоть понимаешь что мелешь? может ну его вообще нафиг писать какое-то ПО? пусть СУБД сама всё делает? чо мы паримся... Ты в вакууме. Что значит нафига? Причем тут ORM и конечная БД? С какого перепуга БД должна подстраиваться под заморочки ORM? hVosttну ты как ляпнешь феерически сказочную глупость, хоть стой хоть падай. Без комментариев даже. Когда повзрослеешь, перечитай свои выбросы. Самому смешно будет. hVosttМСУНу вот чушь когда прекратишь писать? Серьезно, твои бредни читать невозможно... Код: c# 1. Всё. А как ты потом это вмапишь в объекты - базу не колышит. А вмапить можно 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 - это технология, в которой есть свои мапперы и различные механизмы, провайдеры БД и прочие заморочки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:51 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
hVosttтолько ОРМ это не ООП, хотя наследование там есть. Объекты есть, наследование есть, ооп нет, жаль. )) hVosttкакое влияние на модель оказывает реляционный способ хранения данных? Модель это кучка классов в схеме, или нечто более глубокое, типа логика бизнеса в голове тупого заказчика? hVosttкажется, что это я один здесь не понимаю, что EF нужен только для генерации SQL, и отображения таблиц в классы. нужно знать какой SQL генерит EF и жестко это контролировать. а ещё, так как MS не добавила "нужных фич", пропихивать в СУБД какой хош SQL, благо для этого есть отдельная функция... Конечно, у нас теперь code first, и мы делаем модель вообще без базы, на кой она нам, теперь всем рулит модель, она и базу создаст и грохнет если нужно. Все эти связи и констреинты в топку, всех не согласных, да и команду ms sql к стенке. Вот тогда заживем, наконец-то без говнокода. )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 20:48 |
|
||
|
пакетное удаление
|
|||
|---|---|---|---|
|
#18+
тупое говно ваша ОРМ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 22:15 |
|
||
|
|

start [/forum/topic.php?all=1&fid=18&tid=1357818]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 224ms |
| total: | 366ms |

| 0 / 0 |
