Могу ли я вызвать хранимую процедуру из EntityDataSource? - PullRequest
1 голос
/ 05 апреля 2009

(ASP.net 3.5, C #, SQL Express 2008)

Я хочу иметь веб-форму, где я могу искать «Решения» (моя таблица) по ключевому слову, введенному пользователем, и после того, как результат возвращается и заполняет GridView.

У меня уже есть части этого поиска через хранимую процедуру, которая подключена к моей модели данных сущностей. На этой странице у меня есть EntityDataSource. Как я могу заставить этот EntityDataSource захватывать данные из моей хранимой процедуры?

Я понимаю, что могу просто получить результат через контекст Entity (который работает) и привязать его к сетке, но если я не подключу его к EntityDataSource, я не получу автоматическое разбиение на страницы и сортировку (что была еще одна моя борьба в прошлом)

1 Ответ

5 голосов
/ 05 апреля 2009

Попробуйте использовать Function Import.

  1. Щелкните правой кнопкой мыши на имени EntitySet (заголовок)
  2. Выберите Добавить-> Импорт функций

Вот хороший пост в блоге, который вы можете проверить. Инструменты ADO.NET Entity Framework: Хранимые процедуры, автор Гай Бурштейн

Обновление: Извините, я пропустил часть о EntityDataSource, поэтому я не знаю ни одного свойства, доступного для доступа к импорту функции из EDS, но вы можете попробовать использовать свойство CommandText.

<asp:EntityDataSource ID="SolutionsDataSource" runat="server" 
    CommandText="DataModel.SearchFunction(@Keywords)"
    ConnectionString="name=AdventureWorksEntities">
    <CommandParameters>
        <asp:ControlParameter Name="Keywords" 
            ControlID="SearchTextbox" Type="String"/>
    </CommandParameters>
</asp:EntityDataSource>

Обновление: Что ж, похоже, у меня плохие новости. После использования Reflector для глубокого погружения в EntityDataSource. EntityDataSourceView создается с использованием QueryBuilderUtils.ConstructQuery, что в свою очередь вызывает context.CreateQuery<T>. Для выполнения функции импорта вам потребуется вызов context.ExecuteFunction<T>. Кажется, в этом выпуске не было никакой поддержки для ExecuteFunction, в блогах, которые я читал, упоминалось, что это было запланировано, но в этот выпуск это не вошло, будет ли это в будущих выпусках, которые я могу не говори.

При этом я бы порекомендовал использовать ObjectDataSource, который вы можете создать так, чтобы он все еще поддерживал разбиение на страницы, сортировку и т. Д. Если вы откроете вопрос ObjectDataSource по этой теме, пришлите мне комментарий здесь, и я приму взгляд.

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