首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityReference.Load是否正在检查EntityReference.IsLoaded?

EntityReference.Load是否正在检查EntityReference.IsLoaded?
EN

Stack Overflow用户
提问于 2009-11-17 04:55:20
回答 2查看 950关注 0票数 0

嗨,我想知道EntityReference.Load方法是否包括

代码语言:javascript
复制
If Not ref.IsLoaded Then ref.Load()

我的问题基本上是:

代码语言:javascript
复制
Dim person = Context.Persons.FirstOrDefault
person.AddressReference.Load()
person.AddressReference.Load() 'Does it do anything?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-17 05:17:49

它确实会再次加载。我通过Profiler验证了这一点,它显示了两个查询。默认的合并选项是MergeOption.AppendOnly,它不会阻止再次查询。来自Reflector的代码:

代码语言:javascript
复制
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);
}
票数 2
EN

Stack Overflow用户

发布于 2014-03-14 11:28:13

这里是我为当前项目创建的扩展方法,以供其他找到可接受的答案的人参考。

代码语言:javascript
复制
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();
        }
    }
}

和用法:

代码语言:javascript
复制
Patient patient = // get patient

patient.ClinicReference.EnsureLoaded();
patient.Clinic.DoStuff();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1744799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档