使用EntityDataSource从GridView的导航属性中选择所有项目

时间:2011-11-23 03:50:16

标签: entity-framework gridview many-to-many entitydatasource navigation-properties

我是实体框架的新手并且对此进行了研究但没有用.....尽管我可能没有足够的知识来提出正确的问题。

我有一个名为users的表,其中user_ISN为主键。用户可以是其他用户的朋友,所以我有一个朋友表,其中包含用户的user_ISN和朋友的user_ISN。创建多对多的关系。实体框架已将此建模为具有导航属性user.friends的自联接,这当然会将您带回用户表。

我需要创建一个ASP.Net网页,该网页使用网格视图仅显示当前登录用户的朋友。我为数据源创建了一个参数,用于保存当前用户的ISN。

我无法弄清楚如何只选择当前用户的朋友。我尝试的一切都给了我各种我不理解的错误。你能为我指出正确的方向吗?我非常愿意做更多的研究,但我甚至不知道该搜索什么。

谢谢。

1 个答案:

答案 0 :(得分:1)

在EntityDataSource控件标记中,添加“包含”属性。

例如:

      <asp:EntityDataSource ... Include="Friends" ... />

这是由表格的实体框架提供的导航属性的结果。

现在,您还需要修改EntityDataSource控件的“Where”属性。从属性窗口中选择“Where”属性。这将启动“表达式编辑器”窗口。您需要为User_ISN创建一个参数。接下来,从列表中指定“参数源”。选择适用于将User_ISN传递到页面的选项(例如,如果在URL中传递值,则为QueryString)。最终的“Where”表达式应如下所示:

      it.User_ISN == @User_ISN

此时您已告知EntityDataSource将当前用户的所有朋友都包含在结果中,并且您还指定了如何通过User_ISN为当前用户过滤结果。

重要的是要注意,只有使用TemplateField列时,此方法才有效。如果将BoundField列与GridView一起使用,则无法使用。

如果这没有帮助,请提供您收到的错误消息。