我有一个机架模型和一个服务器模型。目前,当我想要检索单个服务器时,我会执行以下操作,以指定显式加载:
public Server FindAllServer(int id)
{
return project.Servers.Where(c => c.ServerID == id)
.Include(a => a.OperatingSystem)
.Include(a2 => a2.DataCenter)
.Include(a3=>a3.Rack)
.Include(a4=>a4.ServerModel)
.Include(a5=>a5.Technology)
.Include(a6=>a6.VirtualMachines)
.Include(a7=>a7.TechnologyStatu)
.Include(a8=>a8.TechnologyBackUpStatu)
.Include(a9=>a9.TechnologyRole)
.SingleOrDefault();
} public Rack FindAllRack(int id)
{
return project.Racks.Where(c => c.RackID == id)
.Include(a => a.Servers)
.Include(a2 => a2.DataCenter)
.Include(a3 => a3.Firewalls)
.Include(a4 => a4.Routers)
.Include(a5 => a5.Technology)
.Include(a6 => a6.StorageDevices)
.Include(a7=>a7.Switches)
.Include(a8=>a8.Zone)
.SingleOrDefault();
}因此,我不确定如何定义在机架下显式包含服务器的所有导航属性,因为我不能编写以下内容:
project.Racks.Where(c => c.RackID == id).Include(a => a.Servers.Include(………))问题是,如果我在一个机架下有50台服务器,那么对于每台服务器,将有大约7个请求来检索服务器导航属性,所以我将有大约350个请求!
发布于 2013-07-24 22:24:37
我认为您应该能够通过指定属性路径来实现Include()的基于字符串的重载,例如
project.Racks.Where(c => c.RackID == id).Include("Servers.SomePropertyOfServer")编辑:在做了更多的研究之后,看起来这也是可行的:
project.Racks.Where(c => c.RackID == id).Include(a => a.Servers.Select(s => s.SomePropertyOfServer))
有关示例,请参阅this link,特别是标题为“急切加载多个级别”的部分。
https://stackoverflow.com/questions/17835741
复制相似问题