2

下面是一个简单的场景来解释我正在尝试执行的操作。假设我正在创建博客引擎,并且我有两个实体,PostComment,两者之间有一对多的关系。在我服务层,我有一个查询逻辑来获取关于开起来后的细节:如何执行集成测试以测试渴望加载的实体(EF4代码优先)

Post post = new PostByIdQuery(_unitOfWork).WithPostId(5).Execute(); 

这行代码将执行一个查询,将与价值的ID从数据库中检索后实体5.这个查询对象已经被编码并且使用一个真实的数据库来通过集成测试。

有两个业务流程,我可能希望通过指定的ID获取帖子,如果我正在编辑帖子或者当我显示帖子及其评论。此查询对象适用于这两种情况,但由于默认情况下延迟加载评论列表,因此在显示包含评论的帖子时会影响性能。因此,虽然遍历帖子的评论将导致多个数据库命中。

当然,如果我总是渴望负载后的意见,如果我“米只是编辑后会引起不必要的表连接。

因此,我想新的方法添加到流畅的界面,指定是否应该延迟加载注释问题是,如何编写集成测试来检查注释表是否已急切加载,因此,无论何时运行单元/集成测试,都可以检查这个新需求:

据我所知,Post.Comments属性在访问时会显示相同的内容,无论它是急切加载还是懒加载,所以我不知道如何为此创建测试。


编辑:作为一个供参考,这是使用EF4的代码优先机制,因此我的实体是波苏斯。

+0

天上 - 代码第一次 - 对不起,这使这是一个非常困难的问题。 – 2011-02-17 04:43:36

+0

是的np,我原本没有说清楚:) – KallDrexx 2011-02-17 04:45:43

回答

2

您有可能将集合对象转换为更高级的EntityCollection类型,然后检查其中的IsLoaded属性。

Assert.IsTrue(((EntityCollection<Comment>)Post.Comments).IsLoaded); 

如果这样行不通,请看看Rowan对这个问题的回答。我试图让我的代码优先集合被暴露为EntityCollection出于不同的原因。

Using CreateSourceQuery in CTP4 Code First