这是一个简单的场景来解释我想要做的事情。假设我正在创建一个Blogging引擎,我有两个实体,Post
和Comment
,两者之间有一对多的关系。在我的服务层中,我有一个查询逻辑来检索有关帖子的详细信息:
Post post = new PostByIdQuery(_unitOfWork).WithPostId(5).Execute();
该行代码将执行一个查询,该查询将从数据库中检索post实体,其id值为5.此查询对象已经过编码,并使用真实数据库传递集成测试。
如果我正在编辑帖子或显示带有评论的帖子,我可能希望通过指定的ID获取帖子,这有两个业务流程。此查询对象适用于这两种方案,但在显示带有注释的帖子时会有性能影响,因为注释列表默认是延迟加载的。因此,迭代帖子的评论会导致多个数据库命中。
当然,如果我总是急于加载帖子的评论,如果我只是编辑一个帖子就会导致不必要的表连接。
因此,我想在fluent接口中添加一个新方法,该方法将指定是否应该延迟加载注释。问题是,我如何编写一个集成测试来检查注释表是否已经加载,所以每当运行单元/集成测试时都可以检查这个新要求?
据我所知,Post.Comments
属性在访问时会显示相同的内容,无论是急切加载还是延迟加载,所以我不知道如何为此创建测试。
<小时/> 编辑:作为一个FYI,这是使用EF4的Code-First机制,因此我的实体是POCO。
答案 0 :(得分:2)
您有可能将集合对象强制转换为更高级的EntityCollection类型,然后检查其中的IsLoaded属性。
Assert.IsTrue(((EntityCollection<Comment>)Post.Comments).IsLoaded);
如果这不起作用,请看看Rowan对我刚才问过的这个问题的回答。我试图将我的代码优先集合作为EntityCollection公开,原因不同。