gpt4 book ai didi

asp.net - 如何获取 EntityDataSource 以允许我访问子实体?

转载 作者:行者123 更新时间:2023-12-02 16:34:47 24 4
gpt4 key购买 nike

我正在为使用 Northwind 数据库的客户端制作一个非常简单的模型。我有一个包含三个实体的 EDMX 文件:产品、类别和供应商。

我正在尝试创建一个具有 GridView 的页面,用于显示产品,包括类别名称和供应商名称。使用 LINQ to SQL,我可以让 LinqDataSource 控件返回 Products 实体,然后可以在 GridView 中拥有 TemplateField,如下所示:

<ItemTemplate>
<%# Eval("Category.CategoryName") %>
</ItemTemplate>

但是,EntityDataSource 似乎运行得不太好。就好像它不会延迟加载类别数据一样。我有一个非常简单的 EDS:

<asp:EntityDataSource ID="dsProducts" runat="server" 
ConnectionString="name=NorthwindEntities"
DefaultContainerName="NorthwindEntities" EnableFlattening="False"
EntitySetName="Products">
</asp:EntityDataSource>

但是GridView不显示类别名称。如果我为 GridView 创建 RowDataBound 事件处理程序并将 Product 实体绑定(bind)到该行,我会看到该产品的 Category 属性不返回 Nothing。例如,如果我这样做:

Protected Sub gvProducts_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvProducts.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim p As NorthwindModel.Product = e.Row.DataItem
Dim catName = p.Category.CategoryName
End If
End Sub

尝试执行 p.Category.CategoryName 时出现 NullReferenceException。

但是,如果我在 Page_Load 事件处理程序中编写如下代码,我知道延迟加载适用于 EDMX b/c:

    Dim context As New NorthwindModel.NorthwindEntities
Dim p = context.Products.Take(1).Single()

我可以通过 p.Category.CategoryName 获取类别名称,不会出现错误。

我需要做一些巫术才能让 EntityDataSource 包含对检索相关实体的支持吗?

谢谢

解决方案:我指定了 EntityDataSource 的 Include 属性,并注明要包含的实体对象。具体来说,我将 EntityDataSource 控件的声明性标记更新为:

<asp:EntityDataSource ID="dsProducts" runat="server" 
ConnectionString="name=NorthwindEntities"
DefaultContainerName="NorthwindEntities" EnableFlattening="False"
EntitySetName="Products" Include="Category,Supplier">
</asp:EntityDataSource>

最佳答案

关于asp.net - 如何获取 EntityDataSource 以允许我访问子实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3346657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com