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

时间:2009-04-04 20:18:55

标签: asp.net entity-framework stored-procedures

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

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

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

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

1 个答案:

答案 0 :(得分:5)

尝试使用Function Import

  1. 右键单击EntitySet名称(标题部分)
  2. 选择添加 - >功能导入
  3. 这是一篇很好的博客文章供您查看。 ADO.NET Entity Framework Tools: Stored Procedures, by 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深入了解EntityDataSource后。 EntityDataSourceView是使用QueryBuilderUtils.ConstructQuery构建的,然后context.CreateQuery<T>调用context.ExecuteFunction<T>。执行函数导入所需的是对ObjectDataSource的调用。在这个版本中似乎没有任何对ExecuteFunction的支持,我正在阅读的博客确实提到它是有计划的,但它没有进入这个版本,无论它是否会在未来的版本中我可以不说。

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