我可以从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合法吗? 是的,了解原因