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。