EF4 Code First:延迟加载问题

时间:2010-08-26 19:20:27

标签: entity-framework-4

在我目前正在处理的网站上,我决定给EF4 Code First一个机会。它似乎并不坏,虽然不支持枚举意味着令人印象深刻的要点被简单的短暂来临否定。

无论如何,我现在遇到的问题是我有一个书籍对象,其中有一组作者。当我点击评论该书的页面时 - 如果该书的作者无法添加到该视图数据中,则会引发错误 - 说该作者的本书集合为空。

所以,我导航到管理页面,去编辑书籍,然后突然作者重新出现。所以我导航回到评论页面,作者现在也出现在这个页面上。

看起来他们没有第一次加载,但由于某种原因,管理部分导致他们加载,所以当我回到评论页面时,一切正常。

如果我碰巧重新编译,直接进入评论页面,它们就会再次消失。

我使用CreateObject set从上下文中获取我的书籍 - 通过存储库。此方法既可以在管理页面上使用,也可以在审阅页面上使用。

感谢您能提供帮助。

2 个答案:

答案 0 :(得分:8)

要允许在POCO类上进行延迟加载,您必须将导航属性标记为虚拟。强制急切加载修改存储库中的查询,并在查询的ObjectSet上使用Include(“Authors”)等内容。

答案 1 :(得分:1)

刚做了一点调查,我知道为什么它在管理页面上有效。经过调试后,我发现这本书的作者集合最初是空的。但是当呈现选择列表时,它包含系统中的所有作者,然后它会填充其作者集合。

因此,在我的审核操作中,我从存储库中检索所有作者,而不以任何方式使用它们,然后我的书的集合也被填充。

我想所有这些令人费解的问题导致了一个问题:如何修复延迟加载,或者如何确保加载。我不认为性能会变得至关重要,而且我现在已经对代码有了足够的了解。想想我暂时会坚持使用Active record / nhibernate进行其他项目。