2010-08-04 7 views
0

Je suis assez nouveau pour cadre de l'entité, mais étant donné un objet simple comme ceci:Comment accéder aux sous-propriétés dans la structure d'entité CTP4?

public class Country 
{ 
    public string Name { get; set; } 

    [Key] 
    public string Code { get; set; } 

    public bool IsPostalCodeRequired { get; set; } 

    public ICollection<Province> Provinces { get; set; } 
} 

retourné par un DbContext, la propriété Provinces est nulle. Si j'utilise la méthode Include sur ma déclaration linq pour inclure les provinces, alors cela fonctionne. Mais je me demandais s'il y avait un moyen de les charger quand j'accède à la propriété? Je sais qu'il y a des problèmes de performance à considérer ici, mais je veux juste savoir comment le faire.

Merci,

Répondre

1
  1. Assurez-vous ObjectContext.ContextOptions.LazyLoadingEnabled est vrai. C'est la valeur par défaut pour un nouveau projet.
  2. Si vous utilisez des entités POCO pures, le chargement paresseux ne peut pas fonctionner (pensez-y). Vous pouvez donc utiliser des proxies POCO. Encore une fois, c'est le comportement par défaut, mais faire un chargement paresseux avec des proxies POCO nécessite que toutes les propriétés de relation soient déclarées virtual, et les vôtres ne le sont pas.
1

Craig a tout dit. Je voulais juste dire que par défaut ObjectContext a désactivé LazyLoading. Bien que lorsque vous créez un nouveau projet .net 4.0, le concepteur de modèle l'active explicitement pour les projets .net 4.0. Il est désactivé car EF doit conserver le comportement hérité de .net 3.5 lorsque le chargement différé n'était pas disponible. Cependant, comme vous pouvez remarquer que vous utilisez Dbcontext qui est nouveau et n'a aucune dépendance à .net 3.5. Par conséquent, LazyLoading sera activé par défaut pour vous offrir une expérience transparente.

+0

Merci; clarifié. –

Questions connexes