Построение динамических запросов с помощью С# + Entity Framework + хранимая процедура

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


person kal sir    schedule 10.02.2012    source источник


Ответы (1)


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

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

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

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

person Gregory A Beamer    schedule 10.02.2012