J'ai une maquette très simple que je fais pour un client qui utilise la base de données Northwind. J'ai un fichier EDMX avec trois entités: produits, catégories et fournisseurs.Comment puis-je obtenir EntityDataSource pour me permettre d'accéder à des entités enfants?
J'essaye de créer une page qui a un GridView qui montre les produits, y compris le nom de catégorie et le nom de fournisseur. Avec LINQ to SQL je peux avoir le contrôle LinqDataSource retourne l'entité Produits et peut alors avoir un TemplateField dans le GridView comme ceci:
<ItemTemplate>
<%# Eval("Category.CategoryName") %>
</ItemTemplate>
Cependant, il semble que le EntityDataSource ne joue pas si bien. C'est comme si elle ne chargeait pas paresseusement les données de la catégorie. J'ai un très simple EDS:
<asp:EntityDataSource ID="dsProducts" runat="server"
ConnectionString="name=NorthwindEntities"
DefaultContainerName="NorthwindEntities" EnableFlattening="False"
EntitySetName="Products">
</asp:EntityDataSource>
Mais le GridView ne montre pas le nom de la catégorie. Si je crée un gestionnaire d'événements RowDataBound pour GridView et que l'entité Product est liée à la ligne, je vois que la propriété Category du produit renvoie Nothing. Par exemple, si je fais:
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
je reçois un NullReferenceException lorsque vous essayez de faire p.Category.CategoryName.
Cependant, je sais que les travaux de chargement paresseux pour le EDMX b/c si j'écrire du code dans le gestionnaire d'événements Page_Load comme:
Dim context As New NorthwindModel.NorthwindEntities
Dim p = context.Products.Take(1).Single()
Je peux obtenir le nom de la catégorie via p.Category.CategoryName sans erreur.
Y a-t-il du vaudou que je dois faire pour que l'entité EntityDataSource inclue le support de la récupération des entités associées?
Merci
SOLUTION: I spécifié Inclure propriété du EntityDataSource, notant l'entité des objets à inclure. Plus précisément, je mis à jour le balisage déclaratif de mon contrôle EntityDataSource à:
<asp:EntityDataSource ID="dsProducts" runat="server"
ConnectionString="name=NorthwindEntities"
DefaultContainerName="NorthwindEntities" EnableFlattening="False"
EntitySetName="Products" Include="Category,Supplier">
</asp:EntityDataSource>
Merci, merci, merci! Pour la notice, j'ai ajouté la propriété Include = "Category, Supplier" dans le balisage déclaratif d'EntityDataSource. –