Entity framework 在单独查询中加载相关实体并对子集合进行排序
我需要首先使用EF4.1代码检索包含在几个相关表中的数据。现在如果我用这个Entity framework 在单独查询中加载相关实体并对子集合进行排序,entity-framework,ef-code-first,Entity Framework,Ef Code First,我需要首先使用EF4.1代码检索包含在几个相关表中的数据。现在如果我用这个 return Context.Set<Entity>() .Include(x => x.Children.Select(y => y.GrandChildren.Select(z => z.Child))) .Include(x => x.SomeEntity) .Include(x => x.
return Context.Set<Entity>()
.Include(x => x.Children.Select(y => y.GrandChildren.Select(z => z.Child)))
.Include(x => x.SomeEntity)
.Include(x => x.AnotherEntity)
.OrderByDescending(x => x.Id)
.FirstOrDefault();
返回上下文.Set()
.Include(x=>x.Children.Select(y=>y.sunderren.Select(z=>z.Children)))
.Include(x=>x.SomeEntity)
.包括(x=>x.AnotherEntity)
.OrderByDescending(x=>x.Id)
.FirstOrDefault();
数据提取正确,但我担心两件事:
1) 似乎没有办法对孩子/孙子进行分类
2) 数据在一个表中展平,这意味着实体(和所有其他)数据对于每个孙记录都是重复的
问题:
- 我需要做什么才能对孩子/孙子进行排序
- 在这种特殊情况下,第二点本身可能不是问题,因为传输的数据量不大——最多30条记录,包含30列。尽管如此,我还是想知道是否有办法分别加载Entity、子代和孙辈(3个查询),并将他们加入到客户端站点
SortedList
或其他集合来维护排序顺序(这是具有可靠排序关系的要求)
数据在一个表中展平,这意味着实体(和所有其他)数据对于每个孙记录都是重复的
这是。您可以通过关闭延迟加载并使用单独的查询加载数据来避免这种情况:
context.Configuration.LazyLoadingEnabled = false;
var parent = context.Set<Entity>().First(e => e.Name = "ABC");
// Load relations in separate query
context.Set<Child>()
.Where(c => c.Parent.Name == "ABC")
.OrderBy(c => c.Name) // You can at least try it but as mentioned above it may not work in all scenarios
.Load();
// Now parent.Children collection should be filled
context.Configuration.LazyLoadingEnabled=false;
var parent=context.Set().First(e=>e.Name=“ABC”);
//独立查询中的加载关系
context.Set()
.其中(c=>c.Parent.Name==“ABC”)
.OrderBy(c=>c.Name)//您至少可以尝试一下,但如上所述,它可能不适用于所有场景
.Load();
//现在,应该填写parent.Children集合
对于其他关系和嵌套关系,也可以采用相同的方法。关键是要正确构造子孙孙加载的Where
条件
这并不意味着这种方法比平铺的表更快。这种方法对每个执行的查询进行单独的数据库往返,因此在较小的数据集中,展平表可以更快