J'essaie d'activer Lazy Loading dans un context EF4.
Le code qui essaie de charger datatables est:
using (IUnitOfWork uw = new EFUnitOfWork()) { foreach (Document doc in uw.Documents.All) { Console.WriteLine("Name: {0} Description: {1} Category: {2}", doc.Name, doc.Description, doc.DocumentCategory.Name); } }
J'expérimente les templates Repository et Unit of Work, mais si je comprends bien, la command ci-dessous devrait fonctionner.
ctx.ContextOptions.LazyLoadingEnabled = true;
Le problème que j'ai est lors de l'access à doc.DocumentCategory.Name, j'obtiens une exception NullReferenceException.
Pourquoi ces données ne sont-elles pas chargées paresseusement?
Si DocumentCategories est chargé, la propriété DocumentCategory est résolue.
Ma class de document est définie comme suit:
public class Document { public Document() { } public Document(int id) { Id = id; } public virtual int Id { get; set; } public virtual ssortingng Name { get; set; } public virtual ssortingng Description { get; set; } public virtual int DocumentCategoryId { get; set; } public virtual bool Deleted { get; set; } public DocumentCategory DocumentCategory { get; set; } public override ssortingng ToSsortingng() { return Name; } }
La propriété DocumentCategory doit également être marquée comme virtuelle afin que le chargement paresseux soit pris en charge. Jetez un oeil à http://msdn.microsoft.com/en-us/library/dd468057.aspx
Document.DocumentCategory est-il déclaré comme virtuel? EF exige ceci, pour générer un type de proxy, qui effectuera réellement le chargement paresseux lorsque vous accédez à la propriété. (Sinon, EF ne sait pas, lorsque vous accédez à la valeur de la propriété)
En outre, si DocumentCategory est déjà virtuel, il peut exister d'autres propriétés qui permettent à EF de générer un type de proxy. Inspectez une instance "Document" avec le débogueur à voir, s'il s'agit en fait d'un type de proxy.