我可以從EntityDataSource調用存儲過程嗎?

asp.net entity-framework stored-procedures

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

我想要一個Web表單,我可以使用用戶輸入的關鍵字搜索“解決方案”(我的表),並在結果返回並填充GridView之後。

我已經通過連接到我的實體數據模型的存儲過程獲得了此搜索的一部分。在這個頁面上,我有一個EntityDataSource。 如何使此EntityDataSource從我的存儲過程中獲取數據?

我意識到我可以通過Entity上下文(它工作)獲取結果,並將其綁定到網格,但如果我不將它連接到EntityDataSource,我將不會得到自動分頁和排序(這是另一個我過去的鬥爭)

一般承認的答案

嘗試使用Function Import

  1. 右鍵單擊EntitySet名稱(標題部分)
  2. 選擇Add-> Function Import

這是一篇很好的博客文章供您查看。 ADO.NET實體框架工具:存儲過程,作者:Guy Burstein

更新:對不起,我錯過了關於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深入深入EntityDataSourceEntityDataSourceView使用QueryBuilderUtils.ConstructQuery構造,然後依次調用context.CreateQuery<T> 。執行函數導入所需的是對context.ExecuteFunction<T>的調用。在這個版本中似乎沒有對ExecuteFunction的任何支持,我正在閱讀的博客確實提到它是有計劃的,但它沒有進入這個版本,無論它是否會在未來的版本中我能夠不要說。

話雖如此,我建議使用一個ObjectDataSource ,你可以用一種仍然支持分頁,排序等方式構建它。如果你打開一個關於這個主題的ObjectDataSource問題,請在這裡給我發表評論,我會看看。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因