使用自定义对象

问题描述:

我有以下为我的实体框架类的一部分的值: -使用自定义对象

public CustomerDetails GetCustomer(int id) { 

     var customerDetails = entities.AccountDefinitions 
     .Where(a => a.ORG_ID == id) 
     .Select(cd => new CustomerDetails 
     { 
      AD = cd, 
      SD = cd.SDOrganization, 
      AA = cd.SDOrganization.AaaPostalAddresses, 
      SN = cd.SiteDefinitions, 
      Ar = cd.SiteDefinitions.SelectMany(a => a.DepartmentDefinitions.SelectMany(a2 => a2.SDUsers.Select(a3 => a3.AaaUser))) 
     }) 
     .SingleOrDefault(); 
     return customerDetails; 
     } 

内。选择里面我有五个任务操作,但是因为一些分配取决于其他所以如何我写的东西,如: -

Ar = SN.SelectMany(…….) 

所以在这种方式我将只查询数据库只有一次检索cd.SiteDefenitions?

+0

我认为你可以像'SN = cd.SiteDefinitions.Include(“DepartmentDefinitions.SDUsers)一样使用[Include method](http://msdn.microsoft.com/en-us/library/bb738708.aspx)。 AaaUser“),以便对第一个引用的查询也将检索第二个引用所需的数据,以便不需要对数据库进行第二次查询。不过,我会证实这一点。 –

+0

实体框架创建了很多未解答的问题,并且您对如何执行查询感到困惑。我用数据库上的存储过程来完成所有的工作,事情很清楚。并且您感觉更安全,因为您确信哪些数据将被准确传输到客户端 –

一个办法是做这样的:

var customerDetails = entities.AccountDefinitions 
    .Where(a => a.ORG_ID == id) 
    .Select(cd => new CustomerDetails 
    { 
     AD = cd, 
     SD = cd.SDOrganization, 
     AA = cd.SDOrganization.AaaPostalAddresses, 
     SN = cd.SiteDefinitions 
    }) 
    .SingleOrDefault(); 

if (customerDetails != null) 
{ 
    customerDetails.Ar = customerDetails.SN... 
} 

return customerDetails; 

我知道这可能不是很什么你要找的,但你不会在在SN属性将能够get像这样的无参数构造器操作(AFAIK)。

+0

因此,对数据库执行多个查询以启动类,而不是重新使用内存中已存在的数据是一种不好的做法。 –

+0

@JohnPeter,做一次往返会更好,尽管这是可以辩论的。在你的场景中,我会说,为了确保代码**在数据库扩展时缩放**,在对象初始化后不要进行两次往返并设置“Ar”。 –

+0

所以唯一的选择是遵循你的方法? –