Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Context.CreateQuery正在加载所有内容吗?_.net_.net 4.0_Entity Framework 4 - Fatal编程技术网

.net Context.CreateQuery正在加载所有内容吗?

.net Context.CreateQuery正在加载所有内容吗?,.net,.net-4.0,entity-framework-4,.net,.net 4.0,Entity Framework 4,我一直在为EF4工作,完成了很多工作,它工作得非常好,我确实遇到的一个问题是:Context.CreateQuery返回正确,但它也加载了所有相关的实体 一旦数据库中有真实数据,这将导致大量问题 有没有关于如何阻止它加载所有相关实体的想法 以下是我所拥有的部分: 最初的呼吁: public ObjectNameHere GetById(Guid id) { return Query(p => p.Id == id).SingleOrDefault(); }

我一直在为EF4工作,完成了很多工作,它工作得非常好,我确实遇到的一个问题是:Context.CreateQuery返回正确,但它也加载了所有相关的实体

一旦数据库中有真实数据,这将导致大量问题

有没有关于如何阻止它加载所有相关实体的想法

以下是我所拥有的部分:

最初的呼吁:

public ObjectNameHere GetById(Guid id)
    {
        return Query(p => p.Id == id).SingleOrDefault();
    }
提供者库

private static Type GetBaseType(Type type)
    {
        var baseType = type.BaseType;
        if (baseType != null && baseType != typeof(EntityObject))
        {
            return GetBaseType(type.BaseType);
        }
        return type;
    }

    private static bool HasBaseType(Type type, out Type baseType)
    {
        var originalType = type.GetType();
        baseType = GetBaseType(type);
        return baseType != originalType;
    }

    private IQueryable<T> CreateQuery<T>()
    {
        Type baseType;
        return HasBaseType(typeof(T), out baseType)
                   ? Context.CreateQuery<T>(ProviderHelper.GetEntitySetName(Context, baseType.Name)).OfType<T>()
                   : Context.CreateQuery<T>(ProviderHelper.GetEntitySetName(Context, baseType.Name));
    }
提供者助手

    public static string GetChildTypeNames(Type[] childTypes)
    {
        var context = ContextProvider.Context;

        var childNames = new StringBuilder();

        for (var i = 0; i < childTypes.Count(); i++)
        {
            childNames.Append(GetEntitySetName(context,childTypes[i].Name));

            if (i != childTypes.Count()) { childNames.Append("."); }
        }
        return childNames.ToString();
    }

    public static string GetEntitySetName(ObjectContext context, string entityTypeName)
    {

        var container = context.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace);
        return (from meta in container.BaseEntitySets
                                where meta.ElementType.Name == entityTypeName
                                select meta.Name).FirstOrDefault();
    }

詹姆斯,我知道你解决了这个问题,伙计,但是你也试着看看你是否可以使用我认为EF中的部分选择方法,比如Skip&Take

我不得不承认,我经常忘记延迟加载,但从长远来看,这从来都不是一个真正的问题,因为我从来没有从数据库中提取过比我需要的更多的内容

只是一个想法

我更像一个L2S的人


嘿…

谢谢你的回复,我通过添加以下行使其正常工作:

Context.ContextOptions.LazyLoadingEnabled=false

在基类中的CreateQuery方法中,这是有效的,我在80%确定之前已经尝试过了


但是哦,好吧:

我刚刚又试着关闭懒散加载,这次它工作正常了。。。我很困惑。。。哦,好吧。。。不管怎样,谢谢。这就是链接中的内容:是的,我知道,这篇文章有点过时了,因为它提到了延迟加载,因为它是懒散加载。我发誓我以前已经把它放在那里了,但它不起作用,但没关系,谢谢你的帮助,我会把你标记为答案,但是你能做一个编辑来解释区别吗,其他找到这篇文章的人?干杯