powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Организация запросов из десктопного клиента к субд
25 сообщений из 248, страница 5 из 10
Организация запросов из десктопного клиента к субд
    #38054949
вопросец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

откуда столько экспрессии? что-то зацепило?

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

ты наверное в жизни не сталкивался с данными, которые не укладываются в твой стандартный шаблон в голове. я говорю, например, об обработке пространственных данных (у нас такая специфика). такие вещи и все, что с ними связано очень специфичны для каждой субд. и не считаться с этим не правильно. кроме того общаться с субд тоже надо с умом, бо реализации у них весьма разные и не считаться с этим при написании софта... я здесь говорю о различии в реализации блокировок, транзакций и т. п.. кроме того, каждая субд предоставляет очень много фирменных плюшек, использование которых позволит очень эффективно использовать ресурсы сервера. но тебе этого всего не понять. подозреваю, ты обычный клепатель говномордочек к базам типа бухгалтерия и т.п.. там твои подходы со скрипом да и прокатят, тебе хватит стандартного select/insert/update.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055118
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ имел в виду применение чего-то типа Hibernate/NHibernate.
Ну так есть же NHibernate.Linq, чем не LINQ? :)

вопросецМСУ,
откуда столько экспрессии? что-то зацепило?
Экспрессии нет, ничего не цепляло, обычная шумная дискуссия, коих сотни на форуме. Что опять не так?

вопросецесли тебе полегчает
Да мне собственно не тяжелело.

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

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

вопросец я говорю, например, об обработке пространственных данных (у нас такая специфика). такие вещи и все, что с ними связано очень специфичны для каждой субд. и не считаться с этим не правильно.
Тебе же объяснили 10 раз, никто не запрещает написать врапперы на вьюхах (ну или хп), после чего эти объекты радостно используются в типизированном датаконтексте ORM. В чем проблемы?

вопросецкроме того общаться с субд тоже надо с умом, бо реализации у них весьма разные и не считаться с этим при написании софта...
Ты не поверишь, но нужно всё делать с умом. С дуру можно и ... сломать.

вопросеця здесь говорю о различии в реализации блокировок, транзакций и т. п.. кроме того, каждая субд предоставляет очень много фирменных плюшек, использование которых позволит очень эффективно использовать ресурсы сервера.
Всё это можно сделать через ORM, и уровни изоляции, и транзакционность. Ресурсы сервера в надежных руках.

вопросецно тебе этого всего не понять. подозреваю, ты обычный клепатель говномордочек к базам типа бухгалтерия и т.п.. там твои подходы со скрипом да и прокатят, тебе хватит стандартного select/insert/update.
Поржал. Ты в своём географическом ларьке вообще отупел от хранимых процедур - это ж надо такое придумать, code monkey принимает решение о выборе СУБД. Бугага.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055158
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

ну раз ORM может все, то как сделать это? http://www.sql.ru/forum/actualthread.aspx?tid=978484&hl=
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055186
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanМСУ,
ну раз ORM может все, то как сделать это? http://www.sql.ru/forum/actualthread.aspx?tid=978484&hl=
Стыдно такие вопросы задавать, netivan. Чай не в первом классе. Срочно вбивай буковки "linq join multiple fields" в гугл и радуйся щастью.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055242
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

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

вот не надо тут бла бла. решите мне такую задачу, вот есть у вас таблица и в ней есть С1,С2 столбцы, окда. И вам надо из нее вытянуть данные, которые (С1=х1 & С2=х2) ИЛИ (С1=х11 & С2=х21) ... и тд много раз.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055316
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanМСУ,

вот не надо тут бла бла. решите мне такую задачу, вот есть у вас таблица и в ней есть С1,С2 столбцы, окда. И вам надо из нее вытянуть данные, которые (С1=х1 & С2=х2) ИЛИ (С1=х11 & С2=х21) ... и тд много раз.
Ты как инопланетянен. Ты можешь внятно сформулировать вопрос?
1. Что такое "окда"?
2. Ты сначала спрашиваешь про временные таблицы, потом про linq join multiple fields. Определись.
3. Еще раз, ты хочешь динанически формировать условие where? Лямбду в помощь - доклеивай в IQueryable новый OR-предикат, в чем сложность?
4. Сложно написать адекватный работающий семпл, демонстрирующий проблему? Тогда не потребуется гадать на кофейной гуще, что там нагенерило твой сознание.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055323
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

Код: c#
1.
3. Еще раз, ты хочешь динанически формировать условие where? Лямбду в помощь - доклеивай в IQueryable новый OR-предикат, в чем сложность?

да нет сложности , благо и библиотеки есть хорошие. Сложность начинается когда это в 10 раз медленнее работает.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055436
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KorbanzЗдравствуйте. Подскажите как лучше организовать запросы клиента (на C#) к бд (postgresql):
написать хранимые процедуры и вызывать их из клиента или зашивать sql запросы в сам клиент(этого делать не хочется) или есть ещё какие-то способы?
* надо три слоя - презентации, бизнес-слой, слой доступа к данным
* опционально бизнес-слой можно соединить со слоем презентации, если в нем использовать MVP/MVVM паттерн, иначе отдельные бизнес-службы в DI-контейнер
* слой доступа к данным в виде абстракции ObjectQuery или Repository, в которых можно конкретно реализовать любой подход для доступа к данным, их тоже в DI-контейнер

выбор БД:
* для обычного CRUD приложения с небольшими объемами данных лучше использовать MS SQL Express, который бесплатный и лучше дружит с человеком
* если есть особенности - то надо изучать их и тогда выбирать БД

выбор технологии для слоя доступа к данным:
* для обычного CRUD приложения с небольшими объемами данных и MS SQL Express лучше всего подойдет LINQ-to-SQL, там тоже можно написать хранимые процедуры, но это будет означать распределение бизнес-логики по нескольким местам, что увеличивает сложность => больше ошибок

можно предположить следующие особенности и проблемы:
* большой объем данных:
- общепризнанные ORM имеют проблемы с обработкой больших объемов данных, например EF имел утечку памяти при обработке больше 20000 объектов в одной транзакции
- некоторые общепризнанные ORM имеют проблемы с операциями над сущностями, когда сначала надо сделать select, а потом update (этим страдает LINQ-to-SQL, в EF в более поздних версиях - оптимизировали это, NHibernate 3 умеет через метод Load)
* работа через dto
- когда результат запроса является dto, собранным из нескольких таблиц БД, то появляются проблемы дальнейшей пакетной обработки записей, например для 50000 таких записей надо считать некое поле, затем поменять его значение по определенной логике, а после обновить в БД - EF в таких условия сдается, мало того, что у него утечка памяти, так и еще MS SQL ограничивает длину запроса, что делает невозможным достать по Id с использованием конструкции WHERE ... IN ... 50000 записей, танцы с бубном со средствами построения нативных sql запросов решения не дали
* бизнес-логика, для которой достаточно данных в БД и возможностей языка SQL:
- если бизнес-задача (алгоритм) может быть решена в рамках БД и языка SQL, то тащить данные на клиент, выполнять эту логику и обновлять в БД - работает дольше и сложнее в реализации, чем выполнить это все на стороне БД в хранимых процедурах, плюс если объем данных велик - проблемы умножаются
- но при использовании MS SQL есть бонус - подключение C# кода прям в SQL запрос, работате немного медленней, не все гладко с преобразованием типов, но зато все возможности C#
* длинные распределенные транзакции, тут надо смотреть откуда они зародились

в выше описанных ситуациях - можно рассмотреть использование хранимых процедур

другие проблемы:
* ORM предполагалась как решения проблемы кросс-платформенности, но в реальности это не всегда так, например различия автоинкрементного поля в Oracle (sequence) и MS SQL 2000-2008 (identity) или ограничение идентификатора в Oracle 10g в 30 символов

фиганычKorbanz,

wcf + хранимые процедуры.

почему wcf:
1. Можешь прикрутить SSL для клиент/серверного обмена
2. Можно разворачивать на IIS и юзать кэширование для сложных/долгих запросов.
3. Не нужно никого клиента баз данных на самом клиенте.
3. Ну и стандартные плюсы трехзвенки.

почему хранимые процедуры:
1. В опу запуск SQL с клиента рассадник sql-инъекций.
2. Статичный SQL запрос проще/лучше оптимизировать.
3. При обновлении структуры базы ты сразу же обновляешь запросы, а не выискиваешь эти запросы в коде клиента - причём некоторые запросы вылазят не сразу, а со временем.
4. Проще разграничивать права доступа - дал права на процедуры/пакеты, а не на таблицы/вьюхи.

почему wcf:
1. а если не надо?
2. а если не надо? и можно юзать иные способы кэширования, в СУБД тоже есть кэш
3. зато нужен клиент для WCF

почему хранимые процедуры:
1. кодирование
2. +
3. в случае использования ORM не требуется править запросы
4. не факт

МСУАлексей Кпропущено...
LINQ2SQL!
главное шоп не ублюдочный кодефирст.
как то в итоге с ним быстрее работается:
1. добавил поле в класс, добавил маппинг, нажал развернуть базу => профит
2. добавил поле в БД, пошел в дизайнер, нажал обновить, оно потупило минуты 2-3-5, кинуло в дизайнер кривой класс, пошел править класс, исправил => профит

Cat2Масштабируемость? Чем она выше, чем в двузвенке? Она зависит от от возможностей СУБД, а не от способа доступа. И среднее звено ее может только понизить.
* во-первых "N-tier" - это физическое разделение (разные сервера), да это замедляет
* во-вторых "Layer" (слой) - это логическое разделение, в какой-то меньшей степени это тоже замедляет
* но, если добавить слой служб (сервер приложений) - можно поставить 10 БД, тем самым увеличив пропускную способность системы в целом
* чтобы достичь того же эффекта на клиент_с_логикой -> сервер_БД - необходимо делать прослойку, которая будет консолидировать данные с нескольких БД -> а это и есть третий слой, который если разместить на отдельном сервере выльется в 3-tier
* не для всех систем целесообразно делать слой служб/сервер приложений

Cat2Высокая безопаснеость? В чем она выше, чем при двузвенке?

Надежность трехзвенки не может быть выше надежности базы данных. Она обязательно будет ниже, так как включается ненадежность промежуточного звенеа.
все ерунда, как и через веб-сервер можно поломать все внутри, так и через сервер БД, смотря как настроена безопасность и там и там

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

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

netivanEf 5 рулит
оно уже умеет доставать 50 тыс записей по списку ID и без OutOfMemoryException ?

зы трехзвенка нужна:
- если потребителями является некое третье лицо, которому необходимо программное API
- потребителями являются некие другие платформы
- для масштабируемости и/или использования в шине данных
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055464
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77,

новую книжку прочитал?

какие проблемы из за чего пробемы) сэтим

>оно уже умеет доставать 50 тыс записей по списку ID и без OutOfMemoryException ?
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055465
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanда нет сложности , благо и библиотеки есть хорошие.
А на кой ляд тогда сабж в адо.нет запостал? Чё-то ты моск мне насилуешь, netivan...

netivanСложность начинается когда это в 10 раз медленнее работает.
Сначала нужно руки выпрямить, а потом LINQ юзать. Работает это абсолютно так же, как и через обычный SQL.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055478
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77netivanEf 5 рулит
оно уже умеет доставать 50 тыс записей по списку ID и без OutOfMemoryException ?
"Оно" и умело раньше, RTFM: MergeOption.NoTracking или AsNoTracking()

17-77зы трехзвенка нужна:
- если потребителями является некое третье лицо, которому необходимо программное API
- потребителями являются некие другие платформы
Чушь на постном масле.

17-77как то в итоге с ним быстрее работается:
1. добавил поле в класс, добавил маппинг, нажал развернуть базу => профит
2. добавил поле в БД, пошел в дизайнер, нажал обновить, оно потупило минуты 2-3-5, кинуло в дизайнер кривой класс, пошел править класс, исправил => профит
По первому пункту не торопи коней - а данные куда деваются после разворачивания, ась? Как-то у тебя всё просто - была БД с данными, добавили поле в таблицу и? Подскажу - нужно руками и в двух местах править, а в случае с дизайнером - в одном месте (класс перегенерится автоматом). Делай выводы.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055489
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

ты все это точно говоришь или просто что то подобное ляпаешь?
я вот погуглил про это НоТрекинг и понял что в этом случае ЕФ обекты к графу объектов не добавляет, то есть возвращает левую структуру для чего то
а 777 вроде чего то там хочет апдейтить какие то списки 50000 и т.д.
а то мне кажется что каждый из вас говорит о своем
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055507
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosновую книжку прочитал?
не понял наезда

ViPRosкакие проблемы из за чего пробемы) сэтим
>оно уже умеет доставать 50 тыс записей по списку ID и без OutOfMemoryException ?

а если по-русски написать? это вопрос был?

МСУ"Оно" и умело раньше, RTFM: MergeOption.NoTracking или AsNoTracking()

dto (ака вьюха) и entity разные вещи, пробовал в EF смержить две _разных_ entity ? что пишет? какой exception?

МСУЧушь на постном масле.

абаснуй

МСУПо первому пункту не торопи коней - а данные куда деваются после разворачивания, ась? Как-то у тебя всё просто - была БД с данными, добавили поле в таблицу и? Подскажу - нужно руками и в двух местах править, а в случае с дизайнером - в одном месте (класс перегенерится автоматом). Делай выводы.
во-первых - автоматом там ничего не перегенерится - я уже описал процесс с 2-3-5 минутным ожиданием
во-вторых - я описывал процесс при разработке, когда нет продакшена, при развертывании на продакшн в случае с database-first так же надо писать/генерить скрипт обновления данных в зависимости от ситуации
в-третьих - я разрабатывал database-first модель в EF и code-first модель в NHibernate + Fluent, и вот во втором случае все гораздо быстрее
в-четвертых - хотя да, дизайнера нет в NH, отношения сущностей все же лучше видны на ER-диаграмме
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055529
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77,

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

ViPRosя вот погуглил про это НоТрекинг и понял что в этом случае ЕФ обекты к графу объектов не добавляет, то есть возвращает левую структуру для чего то
Материализованные объекты не отслеживаются в контексте с отключением кеширования, фича чисто для чтения больших массивов данных. О какой "левой структуре" ты вещаешь - одному богу известно.

ViPRosа 777 вроде чего то там хочет апдейтить какие то списки 50000 и т.д.
а то мне кажется что каждый из вас говорит о своем
Про апдейт небыло сказано ни слова, речь шла о OutOfMemoryException , читай внимательнее. Ну а если ты хочешь сделать апдейт нематериализованного объекта, нужен второй конктест.

17-77dto (ака вьюха) и entity разные вещи, пробовал в EF смержить две _разных_ entity ? что пишет? какой exception?
Не DTO, а отключение трекинга. Без трекинга ты не сможешь ничего мержить, еще раз - читай документацию. Фича конкретно под нужды. Ты спросил про чтение 50000 и OutOfMemoryException - я дал тебе рецепт. Теперь ты продолжаешь дальше генерить дополнительные условия. Определись. Если интересует конкретная задача - описывай подробно все нюансы, дам решение. А жалом водить из стороны в сторону будешь в детском саду.

17-77абаснуй
Обосновал двумя страница ранее со ссылками на MS Application Architecture Guide.

17-77во-первых - автоматом там ничего не перегенерится - я уже описал процесс с 2-3-5 минутным ожиданием
Во-первых, автоматом генерится контекст, разумеется, через Run Custom Tool. Если ты не врубился, то речь о том, что не нужно сторонний гавнокод на t4 писать, всё нативно и в коробке.

17-77во-вторых - я описывал процесс при разработке, когда нет продакшена, при развертывании на продакшн в случае с database-first так же надо писать/генерить скрипт обновления данных в зависимости от ситуации
Ты нигде ничего не сказал про то, что эти два пункта относились к продакшену. Во-вторых, причем тут продакшен? На продакшене точно так же могут добавиться поля - и что, ты будешь сносить продуктовую базу и создавать с нуля? Тебя посодютъ (с)
Так что автоматическое создание базы для корпоративных задач - польза нулевая.

17-77в-третьих - я разрабатывал database-first модель в EF и code-first модель в NHibernate + Fluent, и вот во втором случае все гораздо быстрее
Да однохерственно. Что на хибовом флюенте писать маппинги, что на EF. Непонятно, о каких микросекундах выйгрыша ты вещаешь.

17-77в-четвертых - хотя да, дизайнера нет в NH, отношения сущностей все же лучше видны на ER-диаграмме
Дизайнер есть для хиба, опять мимо.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055601
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosугу, был вопрос
в чем суть проблемы с 50тыщ?
там несколько проблем было:
1. в базе, в таблице было порядка 300 тыс записей на тестовом и порядка миллиона на продакшене (они конечно еще были разбиты на группы, но один хрен в группе могло быть 50-100 тыс записей)
2. были функции, например:
* достать 50-100 тыс записей, точнее http URL из них (в поле хранилось), и просканировать все, получив ответ http 200/404, обновить статус в таблице в другом поле
* достать 50-100 тыс записей с вложенными объектами и сгенерировать для них определенные другие данные, потом сохранить это в БД
* вот в таких случаях, при вызове SaveChanges() в EF спустя некоторое время оно падало с OutOfMemoryException, в диспетчере задач было занято 99,99% из 2 Гб ОЗУ
3. был виндовый клиент, в котором был пейджинг и сложный фильтр, чтобы все это дело показывать пользователю, разумеется ему никто не вываливал мешок с миллионом записей, выводился dto, который из нескольких таблиц джоином и в виде .Select(e => new MyDto ...), по факту это работало аналогично родной вьюхе MS SQL
4. из виндовго клиента, после всяких фильтров и выделений записей на сервер приходило: либо условия запроса, либо условия запроса + список ID исключенных из обработки, либо только список обрабатываемых ID
5. соответственно:
* условия запроса работали для dto (вьюхи), но не всегда работал для entity, так как имена полей были разные и там были вложенности, была проблема переложения фильтра
* надо было исключать некоторые записи из обработки по ID, программно или дополнительным WHERE NOT IN
* надо было вытянуть 20 тыс записей по ID, если писать это через WHERE IN - то после 7000 с чем-то MS SQL выдавал, что шибко длинный текст запроса, давайдосвидания
* в некоторых случаях надо было для условия запроса / для указанных ID / нативного SQL запроса подгрузить сущности _вместе_ с вложенными объектами (чтобы их обработать), но не методом N+1, а джоином (Include в EF), и насколько я помню для нативного запроса - это не заработало в принципе, Include можно было включить для entity, но нельзя его включить для самописного нативного SQL, который возвращает тот же самый entity
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055609
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77* достать 50-100 тыс записей с вложенными объектами и сгенерировать для них определенные другие данные, потом сохранить это в БД
* вот в таких случаях, при вызове SaveChanges() в EF спустя некоторое время оно падало с OutOfMemoryException, в диспетчере задач было занято 99,99% из 2 Гб ОЗУ[/quot]
И правильно, что падало. Про трекинг я тебе уже поведал - дерзай.

17-773. был виндовый клиент, в котором был пейджинг и сложный фильтр, чтобы все это дело показывать пользователю, разумеется ему
никто не вываливал мешок с миллионом записей, выводился dto, который из нескольких таблиц джоином и в виде .Select(e => new MyDto ...), по факту это работало аналогично родной вьюхе MS SQL
Ну всё верно, с прямыми руками будет всё нормально работать. Серверный пейджинг рулит.

17-77* условия запроса работали для dto (вьюхи), но не всегда работал для entity, так как имена полей были разные и там были вложенности, была проблема переложения фильтра
Ничего не понятно, какой-то туман вместо конкретики. Можешь адекватно сформулировать проблему?

17-77* надо было исключать некоторые записи из обработки по ID, программно или дополнительным WHERE NOT IN
Можно решить различными способами
1. PredicateBuilder + Like
2. Udf
3. Where(d => ids.IndexOf(" " + item.ToString() + " ") != -1)
4. И т.д.

17-77* надо было вытянуть 20 тыс записей по ID, если писать это через WHERE IN - то после 7000 с чем-то MS SQL выдавал, что шибко длинный текст запроса, давайдосвидания
Выпрямляем руки. Как? Читай выше.

17-77* в некоторых случаях надо было для условия запроса / для указанных ID / нативного SQL запроса подгрузить сущности _вместе_ с вложенными объектами (чтобы их обработать), но не методом N+1, а джоином (Include в EF), и насколько я помню для нативного запроса - это не заработало в принципе, Include можно было включить для entity, но нельзя его включить для самописного нативного SQL, который возвращает тот же самый entity
Опять феерический сумбур. Нужен конкретный пример.
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055619
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНе DTO, а отключение трекинга. Без трекинга ты не сможешь ничего мержить, еще раз - читай документацию. Фича конкретно под нужды. Ты спросил про чтение 50000 и OutOfMemoryException - я дал тебе рецепт. Теперь ты продолжаешь дальше генерить дополнительные условия. Определись. Если интересует конкретная задача - описывай подробно все нюансы, дам решение. А жалом водить из стороны в сторону будешь в детском саду.

вот тут я уже давно определился, читаем внимательней:

17-77- когда результат запроса является dto, собранным из нескольких таблиц БД, то появляются проблемы дальнейшей пакетной обработки записей, например для 50000 таких записей надо считать некое поле, затем поменять его значение по определенной логике, а после обновить в БД - EF в таких условия сдается, мало того, что у него утечка памяти, так и еще MS SQL ограничивает длину запроса, что делает невозможным достать по Id с использованием конструкции WHERE ... IN ... 50000 записей, танцы с бубном со средствами построения нативных sql запросов решения не дали

МСУОбосновал двумя страница ранее со ссылками на MS Application Architecture Guide.

книжку прочитал, думать головой разучился
17-77если потребителями является некое третье лицо, которому необходимо программное API
расскажи как будешь предоставлять бизнес-логику потребителям, которые сами захотят написать собственный клиент с блекджеком и шлюхами, а не юзать твою веб-/вин-морду? хранимки спасут не всегда, вдруг придется консолидировать информацию с нескольких источников
17-77потребителями являются некие другие платформы
протоколы передачи данных и всякие XML идиоты же придумали, правда? упразднишь? как данные передашь на другой континент? ком-объект заюзаешь? xDD

МСУВо-первых, автоматом генерится контекст, разумеется, через Run Custom Tool. Если ты не врубился, то речь о том, что не нужно сторонний гавнокод на t4 писать, всё нативно и в коробке.

для начала надо в дизайнер добавить сущность, а потом уже запускать run custom tool, а чтобы добавить сущность надо сделать процесс описанный мной в пункте 2, так что да я забыл туда дописать еще "нажать Run Custom Tool"

МСУТы нигде ничего не сказал про то, что эти два пункта относились к продакшену. Во-вторых, причем тут продакшен? На продакшене точно так же могут добавиться поля - и что, ты будешь сносить продуктовую базу и создавать с нуля? Тебя посодютъ (с)
Так что автоматическое создание базы для корпоративных задач - польза нулевая.

я и имел ввиду базу девелопера, это ты тут вспомнил про продуктовую базу и стал спрашивать про обновление данных:
МСУа данные куда деваются после разворачивания, ась?
так что не переворачивай слова, а тестовые данные на девелоперской базе заливаются с нуля скриптом и это проще и быстрее чем делать скрипт обновления

МСУДа однохерственно. Что на хибовом флюенте писать маппинги, что на EF. Непонятно, о каких микросекундах выйгрыша ты вещаешь.

кто-то тут говорил что code-first плоха штука, таки засеки сколько времени ты будешь через дизайнер добавлять сущности, в xml-объявлениях EF можно моск сломать, одно и тоже по два или три раза

МСУДизайнер есть для хиба, опять мимо.
не заливай, в самом NH дизайнера нет, про сторонние средства я в курсе
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055633
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77,

а ты пробуй Join c пользовательским типом вместо In
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055634
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так спс. значит еф как был гвоном так и остался
хорошо что не изучил
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055651
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosа ты пробуй Join c пользовательским типом вместо In
ну если будет еще проект с EF, попробую, сейчас я все как-то на NH

ViPRosа так спс. значит еф как был гвоном так и остался
хорошо что не изучил
да незачто, но думаю с NH проблем не меньше будет, там я с другими сталкивался, например
* пейджинг + джоин для загрузки вложенных объектов, stackoverflow пестрит этой проблемой и нашли решение только через QueryOver с вложенным запросом и Distinct Transformer
* в одном уникальном случае, на довольно запутанной структуре БД NH.Linq падал, он не мог транслировать запрос в SQL, но там как бы и так видно, что надо переработать структуру БД
* еще меня волнует момент, когда в MS SQL можно было переносить условие WHERE в JOIN или простая группировка/агрегатные функции, обернутые в алиас таблицы, запросы ускорялись в разы - собственно можно ли такое в современных ORM замутить или нет
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055663
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77,

а мне интересно как раз как они апдейт делают, скопом или по каждому объекту в цикле
...
Рейтинг: 0 / 0
Организация запросов из десктопного клиента к субд
    #38055676
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77вот тут я уже давно определился, читаем внимательней
Я ж тебе сказал, если у тебя DTO или что-то еще - все обновления через новый контекст. Что непонятно? ORM не будут работать с левыми классами.

17-77EF в таких условия сдается, мало того, что у него утечка памяти
Откуда информация по утечкам? Где факты, а не сопли на голом сене?

17-77MS SQL ограничивает длину запроса, что делает невозможным достать по Id с использованием конструкции WHERE ... IN ... 50000 записей, танцы с бубном со средствами построения нативных sql запросов решения не дали
А причем тут EF? Во-вторых, длина запроса называется батчем. В-третьих, выше я тебе пальцем ткнул на 3 варианта, как сделать, чтобы непересвопить батч, мало?

17-77книжку прочитал, думать головой разучился
Книжку не читал, думать головой и не умел?

17-77расскажи как будешь предоставлять бизнес-логику потребителям, которые сами захотят написать собственный клиент с блекджеком и шлюхами, а не юзать твою веб-/вин-морду? хранимки спасут не всегда, вдруг придется консолидировать информацию с нескольких источников
Даже двоешники знают чудесные 3 буквы - SOA. Не сылхал? Срочно открывай букварь и начинай штудировать WCF и ASMX, а то так бездарем и помрешь.

17-77протоколы передачи данных и всякие XML идиоты же придумали, правда? упразднишь? как данные передашь на другой континент? ком-объект заюзаешь? xDD
Причем тут протоколы с XML и ORM? Ты не вписываешься в повороты, заносит то влево то вправо.

17-77для начала надо в дизайнер добавить сущность, а потом уже запускать run custom tool, а чтобы добавить сущность надо сделать процесс описанный мной в пункте 2, так что да я забыл туда дописать еще "нажать Run Custom Tool"
Нужно отрефрешить контекст, и чё дальше-то? Код я не пишу. Про несколько минут ты гонишь, разумеется.

17-77я и имел ввиду базу девелопера, это ты тут вспомнил про продуктовую базу и стал спрашивать про обновление данных
Да какая в жопу разница, чья эта база. На девелоперских стендах также присутствуют данные, которые важны для отладки и тестирования, зачем их сносить? Во-вторых, ты уже сам запутался, сначала говоришь про продакшен, теперь говоришь, что я опять не так понял, и речь, оказывается, уже о девелоперской базе. Я не могу уследить за потоком твоего сознания, определись с мыслями.

17-77так что не переворачивай слова, а тестовые данные на девелоперской базе заливаются с нуля скриптом и это проще и быстрее чем делать скрипт обновления
На каждый чих (добавить поле, изменить релейшен, изменить тип поля, добавить таблицу и т.д.) у тебя будет пересоздаваться гигабайты данных? Ты с дубу рухнул, нахрена это нужно?
Во-вторых, не всегда разработка ведется со своей "чистой" базой. Ты не подумал о том, что есть корпоративные платформенные решения со своими БД (MS Dynamics CRM, SharePoint, Axapta, ECM'ы и т.д.)? Тут уже не удалишь базу, батенька.
Да... способы твои страшны. На каком курсе тебе сейчас читают этот дебилизм? :)

17-77кто-то тут говорил что code-first плоха штука, таки засеки сколько времени ты будешь через дизайнер добавлять сущности, в xml-объявлениях EF можно моск сломать, одно и тоже по два или три раза
А я и не отрицал сего факта - code-first отстой. Засекал - добавить десяток сущностей в контекст 10 секунд (время тупо на выбрать нужные объекты). А теперь ты засеки, сколько раз у тебя будет заново пересоздаватья гигобайтная база для того, чтобы тупо добавить поле. Во-вторых, у тебя уже есть сегодняшние наработанные тестовые данные, нужные для разработки, которые похерятся. Ручками заново будешь их вколачивать? Убей себя, серьезно.

17-77не заливай, в самом NH дизайнера нет, про сторонние средства я в курсе
Ты сам-то понял что сказал? Что значит "в самом"? В "самом" EF тоже нету дизайнера, дизайнер есть в студии.
...
Рейтинг: 0 / 0
25 сообщений из 248, страница 5 из 10
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Организация запросов из десктопного клиента к субд
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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