我可以从EntityDataSource调用存储过程吗?

mic*_*cet 1 asp.net stored-procedures entity-framework

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

我想要一个Web表单,我可以使用用户输入的关键字搜索"解决方案"(我的表),并在结果返回并填充GridView之后.

我已经通过连接到我的实体数据模型的存储过程获得了此搜索的一部分.在这个页面上,我有一个EntityDataSource.如何使此EntityDataSource从我的存储过程中获取数据?

我意识到我可以通过Entity上下文(它工作)获取结果,并将其绑定到网格,但如果我不将它连接到EntityDataSource,我将不会得到自动分页和排序(这是另一个我过去的斗争)

ben*_*wey 5

尝试使用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>
Run Code Online (Sandbox Code Playgroud)

更新: 似乎我有一些坏消息.使用Reflector深入潜入之后EntityDataSource.使用EntityDataSourceView构造QueryBuilderUtils.ConstructQuery,然后依次调用context.CreateQuery<T>.执行函数导入所需的是调用context.ExecuteFunction<T>.在这个版本中似乎没有对ExecuteFunction的任何支持,我正在阅读的博客确实提到它是有计划的,但它没有进入这个版本,无论它是否会在未来的版本中我能够不要说.

话虽如此,我建议使用一个ObjectDataSource,你可以构建一个仍然支持分页,排序等的方式.如果你打开一个关于这个主题的ObjectDataSource问题,请在这里给我发表评论,我会看一看.