Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 选择嵌套的导航属性将在选择单独的导航属性时生成相同的SQL语句_Asp.net Mvc_Entity Framework 4.1 - Fatal编程技术网

Asp.net mvc 选择嵌套的导航属性将在选择单独的导航属性时生成相同的SQL语句

Asp.net mvc 选择嵌套的导航属性将在选择单独的导航属性时生成相同的SQL语句,asp.net-mvc,entity-framework-4.1,Asp.net Mvc,Entity Framework 4.1,我有以下存储库方法:- public AccountDefinition GetCustomer2(int id) { var c = entities.AccountDefinitions.Where(p => p.ORG_ID == id) .Include(a => a.SDOrganization) .Include(a2 => a2.SiteDefinitions)

我有以下存储库方法:-

public AccountDefinition GetCustomer2(int id)
        {      var c = entities.AccountDefinitions.Where(p => p.ORG_ID == id)
               .Include(a => a.SDOrganization)
               .Include(a2 => a2.SiteDefinitions)
                .Include(a3 => a3.SDOrganization.AaaPostalAddresses)
                .Include(a4 => a4.SiteDefinitions.Select(a5 => a5.DepartmentDefinitions.Select(a6 => a6.SDUsers.Select(a7 => a7.AaaUser.AaaContactInfoes)))).SingleOrDefault();
return c; }
但是当我对一些代码进行注释时,我发现调用Action方法时生成的SQL语句是相同的:-

public AccountDefinition GetCustomer2(int id)
        {      var c = entities.AccountDefinitions.Where(p => p.ORG_ID == id)
           //    .Include(a => a.SDOrganization)
            //   .Include(a2 => a2.SiteDefinitions)
                .Include(a3 => a3.SDOrganization.AaaPostalAddresses)
                .Include(a4 => a4.SiteDefinitions.Select(a5 => a5.DepartmentDefinitions.Select(a6 => a6.SDUsers.Select(a7 => a7.AaaUser.AaaContactInfoes)))).SingleOrDefault();
return c; }

这是否意味着当我导航到一个嵌套的导航属性时,EF也会自动检索父导航属性。因此,例如,当我编写
.Include(a3=>a3.SDOrganization.aaapostalAddresss)
时,就不需要编写
.Include(a=>a.SDOrganization)
简言之,是的,必须这样做,否则您无法遍历该导航属性

例如,访问
AccountDefinition.SDOrganization.aaapostaladdress
的唯一方法是
SDOrganization
不为空


话虽如此,我个人的偏好是通过列出它来明确这个中间包含。虽然这没有功能上的好处,但它提醒我们,此属性也将返回

,但在这种情况下,实体框架是否会向数据库发送两个查询;一个是获取“AccountDefinition.SDOrganization.AaaPostalAddresses”,另一个是获取“AccountDefinition.SDOrganization”。@johng不,这将在一个join中执行,但什么控制它,我的意思是什么将强制EF构造一个join而不是多个查询?