2012-02-13 75 views
2

的联盟假设我有一个实体框架4.2级这样的:EF查询来获取所有子类别

class Company 
{ 
    public int ID { get; set; } 
    public ICollection<Employee> Employees { get; set; } 
} 

我有收集这样的:

public ICollection<Company> Companies { get; set; } 

什么是建立一个有效的方法全部职员列表全Companies集合?我不需要担心重复。

注意:我试图在没有实体框架上下文的情况下执行此操作 - 仅使用Companies集合。但是,如果这需要巨大的性能,我可以根据需要获取上下文。

+0

use DataContext dude – 2012-02-13 05:41:28

+0

这很教条。你有没有理由? ASP.MVC应用程序的许多部分都无法访问上下文,并且有必要让对象能够执行此查询而无需执行此查询。 – 2012-02-13 05:44:14

+0

因为我认为这个想法只是在这些拖车桌之间创造了一个多对多的关系! – 2012-02-13 06:38:48

回答

0

我不确定你想达到什么目的,但要查询你想要使用的数据DbContext

你可以配置你上下文设置LazyLoadingEnabled为true,或明确,即查询数据时,包括使用Include扩展配备EF> 4.0的路径员工,自动加载相关的实体。

只要所有公司都在那里,您可以使用SelectMany方法对其进行分析。我没有检查,但AFAIK,LINQ to SQL将按需求执行查询。

如果你坚持不暴露你的DbContext,或者如果您使用的是不同的底层背景下,我建议你把它包起来,做了,因为后面的SelectMany的仓库,但你的朋友是IncludeSelectMany

+0

在正确构造的ASP.NET MVC应用程序中,代码的各部分将无法访问上下文(或存储库)。在这些情况下,如果实体可以在不参考上下文的情况下查询内容,则它可以非常方便。我将属性和方法添加到生成的实体类(通过部分类)。我一直查询没有上下文的成员。但是我不知道如何在集合中构造所有子元素的联合。实体类可以简单地查询现有的集合。 – 2012-02-13 07:26:52

+1

同样,如果集合已经实现,可以简单地使用'SelectMany'函数。无论如何,你如何查询你的数据?它使用ADO.NET Linq命令吗?存储过程?您不想使用内置支持的可扩展性?硬编码SQL非常难以维护,并且容易出错,应该通常避免。我认为这就是LINQ to SQL的原因,无论如何,如果你采用硬编码的方式使用SPROCS并让EF知道它们的话。有关更多信息,请参阅[this](http://goo.gl/28dlq)或[this](http://bit.ly/zs8dX6)。 – Shimmy 2012-02-13 07:38:48

+0

谢谢。 'SelectMany()'是我一直在寻找的东西。要查询数据,我使用EF LINQ查询。到目前为止,我已经能够做这样的事情,如果需要再次访问数据库,它会自动发生。 (没有人会说硬编码的SQL。) – 2012-02-13 17:27:43

相关问题