使用自定义对象
我有以下为我的实体框架类的一部分的值: -使用自定义对象
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?
一个办法是做这样的:
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)。
因此,对数据库执行多个查询以启动类,而不是重新使用内存中已存在的数据是一种不好的做法。 –
@JohnPeter,做一次往返会更好,尽管这是可以辩论的。在你的场景中,我会说,为了确保代码**在数据库扩展时缩放**,在对象初始化后不要进行两次往返并设置“Ar”。 –
所以唯一的选择是遵循你的方法? –
我认为你可以像'SN = cd.SiteDefinitions.Include(“DepartmentDefinitions.SDUsers)一样使用[Include method](http://msdn.microsoft.com/en-us/library/bb738708.aspx)。 AaaUser“),以便对第一个引用的查询也将检索第二个引用所需的数据,以便不需要对数据库进行第二次查询。不过,我会证实这一点。 –
实体框架创建了很多未解答的问题,并且您对如何执行查询感到困惑。我用数据库上的存储过程来完成所有的工作,事情很清楚。并且您感觉更安全,因为您确信哪些数据将被准确传输到客户端 –