سؤال

ومرحبا كنت أتساءل إذا تضمن EntityReference.Load طريقة

If Not ref.IsLoaded Then ref.Load()

وسؤالي هو في الأساس:

Dim person = Context.Persons.FirstOrDefault
person.AddressReference.Load()
person.AddressReference.Load() 'Does it do anything?
هل كانت مفيدة؟

المحلول

فإنه تحميل مرة أخرى. أنا التحقق من ذلك عن طريق التعريف وأظهرت اثنين استفسار. الخيار دمج الافتراضي هو MergeOption.AppendOnly وأنها لا تمنع من الاستعلام مرة أخرى. رمز من العاكس:

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);
}

نصائح أخرى

وفقط للرجوع اليها لأي شخص آخر العثور على إجابة مقبولة، وهنا هو طريقة تمديد أنا خلقت لمشروعي الحالي.

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();
        }
    }
}

والاستعمال:

Patient patient = // get patient

patient.ClinicReference.EnsureLoaded();
patient.Clinic.DoStuff();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top