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