2010-07-27 40 views
3

我爲使用Northwind數據庫的客戶端創建了一個非常簡單的樣機。我有一個包含三個實體的EDMX文件:產品,類別和供應商。如何讓EntityDataSource允許我訪問子實體?

我正在嘗試創建一個具有顯示產品的GridView的頁面,其中包括類別名稱和供應商名稱。隨着LINQ到SQL我可以有LinqDataSource控件返回的產品實體,然後可以在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事件處理程序,並將該產品實體綁定到該行,我發現該產品的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。

但是,我知道延遲加載作品爲EDMX B/C,如果我像Page_Load事件處理程序中編寫代碼:

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

我可以通過p.Category.CategoryName得到分類名稱沒有錯誤。

是否有一些巫術我需要做的是讓EntityDataSource包含對檢索相關實體的支持?

感謝

SOLUTION: 我指定的EntityDataSource的包括物業,注意實體對象包括。具體來說,我在我的EntityDataSource控件的聲明標記更新爲:

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

回答

5
+0

謝謝你,謝謝你,謝謝你! 爲了記錄,我在EntityDataSource的聲明性標記中添加了屬性Include =「Category,Supplier」。 – 2010-07-27 18:57:05

相關問題