Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework 实体框架即使在使用include时也不加载关系_Entity Framework_Lazy Loading - Fatal编程技术网

Entity framework 实体框架即使在使用include时也不加载关系

Entity framework 实体框架即使在使用include时也不加载关系,entity-framework,lazy-loading,Entity Framework,Lazy Loading,我有以下代码: Category selectedCategory = (from c in DB.Category.Include("SubCategory") join a in DB.Accessory on c.AccCatUID equals a.Category.AccCatUID where a.AccUID == currentAccessory.AccUID select c)

我有以下代码:

      Category selectedCategory = (from c in DB.Category.Include("SubCategory")
               join a in DB.Accessory on c.AccCatUID equals a.Category.AccCatUID
               where a.AccUID == currentAccessory.AccUID
               select c).FirstOrDefault();
它工作正常,selectedCategory按预期填充。但是selectedCategory有一个子表“SubCategory”,即使存在包含,也不会加载该子表。在我执行以下操作之前,它不会加载:

            selectedCategory.SubCategory.Load();
为什么我必须显式调用load才能加载子表

编辑:
使用.net 3.5 VS2008时,会删除包含,因为它与第一个ObjectQuery关联,而不是与返回的结果集关联

我想你只需要修改你的查询?除非我在下面遗漏了你真正想要的东西,否则我看不到你使用附件连接的任何地方

        Category selectedCategory = (
             from c in DB.Category.Include("SubCategory")
                where c.AccCatUID == currentAccessory.AccUID
             select c
         ).FirstOrDefault();
还是从另一边

          var fromAccessoryCategory  = 
          (from a in DB.Accessory.Include("Category.SubCategory") 
             where a.AccUID == currentAccessory.AccUID
           select a.Category).FirstOrDefault();

您是否为子类别设置了实体键?可能有助于说明您使用的实体框架的版本,因为延迟加载和对FK关系的访问在4.0中发生了更改。这正是我最初想要做的,但我没有在“c”上直接访问的AccCatUID属性。我收到这样的消息:“DataLayer.Accessory”不包含“AccCatUID”的定义,并且找不到接受类型为“DataLayer.Accessory”的第一个参数的扩展方法“AccCatUID”。是否缺少using指令或程序集引用?是否尝试使用Accessory获取它?我刚刚更新了上面的帖子?我希望基数是1比1。我不明白你的错误吗?当您执行c.AccCatUID时,它是一个类别而不是附件?它是一个1:N一个附件只有一个类别,但一个类别可以有多个附件。然后一个类别下可以有多个子类别。可以这样想:类别->车轮/子类别->黑色20/附件->黑色20轮辋零件号12345。