【发布时间】:2012-05-15 17:21:08
【问题描述】:
我有一个 Asp.net MVC 网站,我在其中使用数据存储中的实体框架来访问数据库(使用 POCO 实体)。
我不知道为什么,但有时,看起来延迟加载只是没有完成:
不工作的代码示例:
using(BusinessEntities context = new BusinessEntities()){
User user = context.Users.First(u=>u.Id == parameterId);
foreach(Post post in user.Posts){//user.Posts is null here and thrown an exception
//.. doing some things
}
}
但如果我这样做,它就完美了
using(BusinessEntities context = new BusinessEntities()){
User user = context.Users.Include("Posts").First(u=>u.Id == parameterId);
foreach(Post post in user.Posts){//user.Posts is null here and thrown an exception
//.. doing some things
}
}
但我不明白为什么延迟加载不起作用:
- 上下文未释放
- 这不是项目匿名对象或类似的东西
- 我知道我的代码中有很多地方我不必指出这一点。包括并做相关工作
- 我已在我的 edmx 模型上将延迟加载启用设置为 True
什么会导致这种行为?
【问题讨论】:
-
您确定您使用的是 EF4 而不是 3?
-
Posts是否声明为virtual? -
@WiktorZychla :是的,我确定,EF3 不提供 POCO
-
@Eranga :不是,但它们是“部分的”,这是个问题吗?
-
@WiktorZychla :对不起,我回复得很快,如果你的意思是财产,不是不是,这是必需的吗?我看到我的一些属性是
标签: asp.net linq entity-framework entity-framework-4 lazy-loading