.net Context.CreateQuery正在加载所有内容吗?
我一直在为EF4工作,完成了很多工作,它工作得非常好,我确实遇到的一个问题是: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(); }
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%确定之前已经尝试过了
但是哦,好吧:我刚刚又试着关闭懒散加载,这次它工作正常了。。。我很困惑。。。哦,好吧。。。不管怎样,谢谢。这就是链接中的内容:是的,我知道,这篇文章有点过时了,因为它提到了延迟加载,因为它是懒散加载。我发誓我以前已经把它放在那里了,但它不起作用,但没关系,谢谢你的帮助,我会把你标记为答案,但是你能做一个编辑来解释区别吗,其他找到这篇文章的人?干杯