Northwind データベースを使用するクライアント用に非常に単純なモックアップを作成しています。製品、カテゴリ、およびサプライヤーの 3 つのエンティティを含む 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 エンティティを取得すると、製品の 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>