У меня есть веб-приложение ASP.NET MVC, которое взаимодействует с базой данных SQL Server 2008 через Entity Framework 4.0.
На определенной странице я вызываю хранимую процедуру, чтобы получить некоторые результаты на основе выбора в пользовательском интерфейсе.
Теперь пользовательский интерфейс имеет около 20 различных вариантов ввода, начиная от текстового поля, раскрывающегося списка, флажков и т. д.
Каждый из этих входов «сгруппирован» в логические разделы.
Пример:
- Поле поиска: "Фу"
- Чекбокс A1: отмечен, Чекбокс A2: снят
- Выпадающий список A: выбран вариант 3
- Флажок B1: установлен, флажок B2: установлен, флажок B3: снят
Поэтому мне нужно вызвать SPROC следующим образом:
exec SearchPage_FindResults @SearchQuery = 'Foo', @IncludeA1 = 1, @IncludeA2 = 0, @DropDownSelection = 3, @IncludeB1 = 1, @IncludeB2 = 1, @IncludeB3 = 0
Пользовательский интерфейс не слишком важен для этого вопроса - просто хотел дать некоторую перспективу.
По сути, я извлекаю результаты для поискового запроса, фильтруя эти результаты на основе набора (необязательных) вариантов выбора, по которым пользователь может фильтровать.
Теперь мои вопросы/вопросы:
- Как лучше всего передать эти параметры хранимой процедуре?
- Существуют ли какие-либо хитрости/новые способы (например, SQL Server 2008) для этого? Специальные "табличные" параметры/массивы - можем ли мы пройти через пользовательские типы? Имейте в виду, что я использую Entity Framework 4.0, но при необходимости всегда могу использовать классический ADO.NET.
- Как насчет XML? Каковы здесь затраты на сериализацию/десериализацию? Стоит ли оно того?
- Как насчет параметра для каждого логического раздела? Возможно через запятую? Просто мысли вслух.
Эта страница особенно важна с точки зрения пользователя и должна работать очень хорошо. Хранимая процедура уже имеет сложную логику, поэтому я хочу свести к минимуму последствия для производительности, так что имейте это в виду.
С учетом сказанного - какой здесь лучший подход?