|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Скажем, нужно сделать обновление поля у кучи записей в таблице. Пытаясь что-то найти по теме, наткнулся на расширение EntityFramework.Extended http://habrahabr.ru/post/203214/ https://github.com/loresoft/EntityFramework.Extended Кто как вообще поступает в подобных случаях? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2015, 20:31 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Shocker.ProСкажем, нужно сделать обновление поля у кучи записей в таблице. Пытаясь что-то найти по теме, наткнулся на расширение EntityFramework.Extended http://habrahabr.ru/post/203214/ https://github.com/loresoft/EntityFramework.Extended Кто как вообще поступает в подобных случаях? В штатной ситуации пакетные обновления не требуются. А если вдруг потребовались, то это огромный косяк в бизнес-логике и в архитектуре данных. Если подобное когда-либо случается, засучиваем рукава и рефакторим. Это расширение работает в обход контекста, т.е. по сути тоже самое, что втыкать SQL. Другого не дано. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2015, 23:42 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Shocker.Pro, Если данных обновлять надо не очень много, то можно отключить отслеживание изменений контекста. А если очень-очень много, то SQL + UPDATE, но повторюсь, это может просто сломать всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2015, 23:44 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttShocker.ProСкажем, нужно сделать обновление поля у кучи записей в таблице. Пытаясь что-то найти по теме, наткнулся на расширение EntityFramework.Extended http://habrahabr.ru/post/203214/ https://github.com/loresoft/EntityFramework.Extended Кто как вообще поступает в подобных случаях? В штатной ситуации пакетные обновления не требуются. А если вдруг потребовались, то это огромный косяк в бизнес-логике и в архитектуре данных. Если подобное когда-либо случается, засучиваем рукава и рефакторим. Это расширение работает в обход контекста, т.е. по сути тоже самое, что втыкать SQL. Другого не дано. ну теперь представь, что с сайтами закончил и написал прогу которая ведет например проекты из 100000 работ и вот кто то сдвинул некоторые работы в начале проекта ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 01:41 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Shocker.ProСкажем, нужно сделать обновление поля у кучи записей в таблице. Пытаясь что-то найти по теме, наткнулся на расширение EntityFramework.Extended http://habrahabr.ru/post/203214/ https://github.com/loresoft/EntityFramework.Extended Кто как вообще поступает в подобных случаях? Так EF же работает с хранимками. То что надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 02:05 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
MonochromatiqueТак EF же работает с хранимками. То что надо.ну, хранимка в данном случае, также как и это расширение, будет выполнена вне контекста, да еще и создаст привязку к конкретной СУБД. Я готов принять версию Хвоста, как рабочую, но мне непонятно, как делать рефакторинг таких вещей: 1) В прайс-листе в одной категории лежит 200 позиций, администратор подумал, что это слишком много, создал еще одну категорию, выбрал галочками по умозрительным критериям 100 позиций и перенес их в другую категорию. 2) Типовая функция для [около]почтовых программ: "пометить все|выделенные письма как [не]прочитанные" 3) Чистка устаревших записей лога ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 11:30 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Shocker.Pro Я готов принять версию Хвоста, как рабочую, но мне непонятно, как делать рефакторинг таких вещей: }{ вост просто не работал с большими объемами данных, вот ему и кажется, что без прямых инъекций можно обойтись. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 12:17 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Shocker.ProСкажем, нужно сделать обновление поля у кучи записей в таблице. Пытаясь что-то найти по теме, наткнулся на расширение EntityFramework.Extended http://habrahabr.ru/post/203214/ https://github.com/loresoft/EntityFramework.Extended Кто как вообще поступает в подобных случаях?Отдельной Command (CQRS). Или через репозиторий, внутри которого одна из реализаций: ExcuteUpdate (NHibernate), ExcuteNonQuery (ADO.NET), Execute (Dapper), Update (MongoDB). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 12:40 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttВ штатной ситуации пакетные обновления не требуются. А если вдруг потребовались, то это огромный косяк в бизнес-логике и в архитектуре данных. Ты укурен? И причем тут "бизнес логика"? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 13:47 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Monochromatique}{ вост просто не работал с большими объемами данных, вот ему и кажется, что без прямых инъекций можно обойтись. Давай-ка реши мне следующие задачи при изменении, «прямыми инъекциями»: 1. Валидация изменений для каждого объекта. 2. Проверка допустимости изменения для пользователя по каждому объекту. 3. Дополнительные задачи инфраструктуры, такие как установка времени изменения, логгирование, и особенно, если ПО предполагает возможность отката последнего изменения. 4. Дополнительные бизнес-процессы, связанные с изменениями. Это всё определяется в бизнес-логике. Поэтому архитектура разделяется на слои, где каждый слой отвечает за свой уровень компетенции. Если требуется часто делать пакетные изменения, возможно данные плохо нормализованы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 14:58 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Shocker.Pro1) В прайс-листе в одной категории лежит 200 позиций, администратор подумал, что это слишком много, создал еще одну категорию, выбрал галочками по умозрительным критериям 100 позиций и перенес их в другую категорию. 2) Типовая функция для [около]почтовых программ: "пометить все|выделенные письма как [не]прочитанные" 3) Чистка устаревших записей лога Кроме логов, которые совершенно точно надо чистить с помощью операции DELETE, остальные действия можно делать обычно, без «низкоуровневых» bulk операций. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:02 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVostt, хм. Пользователь удаляет аккаунт и надо всё с ним связанное деактивировать. Не частое явление конечно, но вполне себе бизнес-логика :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:02 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
МСУТы укурен? И причем тут "бизнес логика"? Шта? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:02 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
skyANAhVostt, хм. Пользователь удаляет аккаунт и надо всё с ним связанное деактивировать. Не частое явление конечно, но вполне себе бизнес-логика :)Ну, по идее, "активность" такого объекта должна определяться одним полем - "активность" юзера. Тогда для деактивирования нужно поменять только поле активности юзера. Тут я с Хвостом согласен ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:07 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
skyANAhVostt, хм. Пользователь удаляет аккаунт и надо всё с ним связанное деактивировать. Не частое явление конечно, но вполне себе бизнес-логика :) Об этом и речь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:08 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttостальные действия можно делать обычно, без «низкоуровневых» bulk операций.Хорошо, как бы концептуально подошел к решению следующей задачи (сюжет основан на реальных событиях): Есть прайс-лист организации - полмиллиона позиций (ну это полный, вместе с тем, чего уже нет в наличии). Есть прайс-листы поставщиков, совокупно несколько миллионов позиций. Прайсы поставщиков нужно периодически обновлять и формировать на основе их прайсов свой прайс. Каждый прайс поставщика - несколько [десятков] тысяч позиций. Его нужно втянуть, сравнить с уже имеющимся в базе, составить карту изменений (что появилось, что пропало, что вообще новое, никогда не было), актуализировать. После чего обновить собственный прайс (сотня тысяч позиций в наличии) - пересчитать наличие и цены с учетом новых реалий. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:13 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Shocker.ProХорошо, как бы концептуально подошел к решению следующей задачи (сюжет основан на реальных событиях): Есть прайс-лист организации - полмиллиона позиций (ну это полный, вместе с тем, чего уже нет в наличии). Есть прайс-листы поставщиков, совокупно несколько миллионов позиций. Прайсы поставщиков нужно периодически обновлять и формировать на основе их прайсов свой прайс. Каждый прайс поставщика - несколько [десятков] тысяч позиций. Его нужно втянуть, сравнить с уже имеющимся в базе, составить карту изменений (что появилось, что пропало, что вообще новое, никогда не было), актуализировать. После чего обновить собственный прайс (сотня тысяч позиций в наличии) - пересчитать наличие и цены с учетом новых реалий. Такую задачу я бы решал естественно запросами к БД, а не через EF контекст, если (скорее всего) с записями в прайс-листах не связаны никакие бизнес-процессы, они не представляют собой объекты домена приложения, т.е. это просто табличные данные, значит с ними вполне уместно работать запросами. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:17 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttТакую задачу я бы решал естественно запросами к БД, а не через EF контекст, если (скорее всего) с записями в прайс-листах не связаны никакие бизнес-процессы, они не представляют собой объекты домена приложения, т.е. это просто табличные данные, значит с ними вполне уместно работать запросами.как раз мой первоначальный вопрос был примерно об этой ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:22 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttShocker.ProХорошо, как бы концептуально подошел к решению следующей задачи (сюжет основан на реальных событиях): Есть прайс-лист организации - полмиллиона позиций (ну это полный, вместе с тем, чего уже нет в наличии). Есть прайс-листы поставщиков, совокупно несколько миллионов позиций. Прайсы поставщиков нужно периодически обновлять и формировать на основе их прайсов свой прайс. Каждый прайс поставщика - несколько [десятков] тысяч позиций. Его нужно втянуть, сравнить с уже имеющимся в базе, составить карту изменений (что появилось, что пропало, что вообще новое, никогда не было), актуализировать. После чего обновить собственный прайс (сотня тысяч позиций в наличии) - пересчитать наличие и цены с учетом новых реалий. Такую задачу я бы решал естественно запросами к БД, а не через EF контекст, если (скорее всего) с записями в прайс-листах не связаны никакие бизнес-процессы, они не представляют собой объекты домена приложения, т.е. это просто табличные данные, значит с ними вполне уместно работать запросами.+1 Зачем это делать через EF? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:25 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
Shocker.ProhVosttТакую задачу я бы решал естественно запросами к БД, а не через EF контекст, если (скорее всего) с записями в прайс-листах не связаны никакие бизнес-процессы, они не представляют собой объекты домена приложения, т.е. это просто табличные данные, значит с ними вполне уместно работать запросами.как раз мой первоначальный вопрос был примерно об этой ситуации. Ну технически, запросами. Уж как конкретно, прямыми SQL, или вызовом хранимки, или с помощью некоего экстеншена, это уже by design. Объёмы табличных данных большие, операция периодическая, значит это будет делать некий сервис. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:26 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:27 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
skyANA Выбор ORM-стратегии (.NET) В Абрикосе в импорте данных используется Dapper. Даппер кажется и рожден для того, чтобы колбасить данные, импорт/экспорт/массовая обработка... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:31 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
skyANA, спасибо, хорошая статья ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:38 |
|
EF: Как вы делаете пакетные операции?
|
|||
---|---|---|---|
#18+
hVosttskyANA Выбор ORM-стратегии (.NET) В Абрикосе в импорте данных используется Dapper. Даппер кажется и рожден для того, чтобы колбасить данные, импорт/экспорт/массовая обработка... :)Мой посыл в том, что если грамотно изолировать слой доступа к данным, то где надо внутри импользуешь EF, где надо Dapper, а где-то и голый ADO.NET. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2015, 15:39 |
|
|
start [/forum/topic.php?fid=17&msg=38885731&tid=1349618]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
177ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 238ms |
total: | 526ms |
0 / 0 |