Répondre

2

Il fait à nouveau la charge. J'ai vérifié cela par Profiler et il a montré deux requêtes. L'option de fusion par défaut est MergeOption.AppendOnly et n'empêche pas d'interroger à nouveau. Code du réflecteur:

public override void Load(MergeOption mergeOption) 
{ 
    base.CheckOwnerNull(); 
    ObjectQuery<TEntity> query = base.ValidateLoad<TEntity>(mergeOption, "EntityReference"); 
    base._suppressEvents = true; 
    try 
    { 
     List<TEntity> collection = new List<TEntity>(RelatedEnd.GetResults<TEntity>(query)); 
     if (collection.Count > 1) 
     { 
      throw EntityUtil.MoreThanExpectedRelatedEntitiesFound(); 
     } 
     if (collection.Count == 0) 
     { 
      if (base.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.One) 
      { 
       throw EntityUtil.LessThanExpectedRelatedEntitiesFound(); 
      } 
      if ((mergeOption == MergeOption.OverwriteChanges) || (mergeOption == MergeOption.PreserveChanges)) 
      { 
       EntityKey entityKey = ObjectStateManager.FindKeyOnEntityWithRelationships(base.Owner); 
       EntityUtil.CheckEntityKeyNull(entityKey); 
       ObjectStateManager.RemoveRelationships(base.ObjectContext, mergeOption, (AssociationSet) base.RelationshipSet, entityKey, (AssociationEndMember) base.FromEndProperty); 
      } 
      base._isLoaded = true; 
     } 
     else 
     { 
      base.Merge<TEntity>(collection, mergeOption, true); 
     } 
    } 
    finally 
    { 
     base._suppressEvents = false; 
    } 
    this.OnAssociationChanged(CollectionChangeAction.Refresh, null); 
} 
+0

Merci pour vos efforts, j'apprécie vraiment ça! – Shimmy

+0

J'ai créé une méthode d'extension pour RelatedEnd qui vérifie avant le chargement. – Shimmy

0

Juste pour référence pour toute personne qui trouve encore la réponse acceptée, voici la méthode d'extension que j'ai créé pour mon projet en cours.

using System.Data.Objects.DataClasses; 

namespace ProjectName 
{ 
    public static class EntityFrameworkExtensions 
    { 
     public static void EnsureLoaded<TEntity>(this EntityReference<TEntity> reference) 
      where TEntity : class, IEntityWithRelationships 
     { 
      if (!reference.IsLoaded) 
       reference.Load(); 
     } 
    } 
} 

et utilisation:

Patient patient = // get patient 

patient.ClinicReference.EnsureLoaded(); 
patient.Clinic.DoStuff(); 
+0

Quelqu'un at-il une réponse pour cela qui fonctionne dans EF6? –