Построение динамических запросов с помощью c # + Entity Framework + Хранимая процедура - PullRequest
1 голос
/ 10 февраля 2012

Я работаю над частью функциональности, где пользователь может выбрать несколько параметров с несколькими значениями в каждом параметре. Я пытаюсь выяснить, как спроектировать эту функциональность в моем приложении, используя C #, сущностный каркас, в котором сущности сопоставляются с хранимой процедурой. По соображениям безопасности мое приложение должно получить доступ к базе данных через суррогатную базу данных, в которой есть только хранимые процедуры. Поэтому мои сущности сопоставляются с хранимыми процедурами для вставки, обновления и выбора. В конечном итоге мне нужно передать выбранные пользователем фильтры в хранимую процедуру для запроса к базе данных. Одно из решений, о которых я подумал, - это получить все данные на бизнес-уровне и использовать linq для дальнейшей фильтрации. Но это не идеально из-за того, что объем данных, фильтруемых в памяти, больше, чем в базе данных, которая лучше подходит для выполнения такого сложного запроса. Я видел посты для построения динамических запросов с linq, но в постах такого типа сущности отображаются в таблицы, что облегчает их. Любая помощь здесь будет принята с благодарностью. Благодарю вас, sirkal

1 Ответ

0 голосов
/ 10 февраля 2012

EF (и LINQ в этом отношении) используют отложенное выполнение. Вы можете довольно легко создать динамический запрос, используя IQueryable (время поиска Google?) И создав критерии фильтрации в объекте, который вы строите (вы можете сделать это без объекта, но думаете, что его можно использовать повторно).

Что касается SQL sproc, вы также можете решить его, передав все элементы, которые могут изменить фильтр, и заставить SQL динамически работать с данными для получения результирующего набора.

Какой выбрать? Это действительно зависит от того, где находится основная компетенция в вашей группе. Я предпочитаю код C # в основном из-за фамильярности (потратил годы, занимаясь sprocs, но динамические sprocs могут быть настоящей болью).

Теперь одна вещь, о которой вы хотите опасаться, - это динамические запросы, которые не могут быть легко настроены сервером (например, статистика в SQL Server, хотя другие РСУБД используют аналогичные концепции). Например, одна проблема, с которой я столкнулся при работе с LINQ to SQL, - это динамические запросы, которые приводят к тому, что SQL выполняет неоптимально, что требует большого количества ручных операций от администратора баз данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...