当我将ViewModel对象传递给ASP.NET MVC视图页面时,NHProf生成'从视图'执行的'此语句'警告

我刚刚注意到,在我的网站的一个页面上,我将ViewModel传递给我的View页面,NHProf发出以下警告:   此视图从视图执行,可能导致性能不佳和/或脆弱行为。 然后链接到此页面:http://nhprof.com/Learn/Alerts/QueriesFromViews 我的ViewModel只包含2个属性:
public IEnumerable<Photo> Photos { get; set; }
public Photo SelectedPhoto { get; set; }
我将照片分配给Controller中的ViewModel,如下所示:
PhotoViewModel myViewModel = new PhotoViewModel();
myViewModel.Photos = entity.Photos;
My View显然继承了这种类型,除了输出一个标题(使用
SelectedPhoto
对象)之外,它只是循环遍历每个
Photos
为每个标题呈现一些内容。 NHProf将“问题”查询显示为在我的视图中检索我正在循环的照片集合的位置,尽管我没有明确告诉它从我的视图中获取这些记录 - 我已通过我的ViewModel的
Photos
属性中的那些记录。 我有其他页面,我不需要传递ViewModel,我只是将
IEnumerable<Photo>
传递给View,然后渲染标记与我在问题视图中完全相同,并且NHProf不会发出警告(因为不应该be)在那种情况下。 我想也许它与Lazy Loading有关,因为我的集合是ViewModel的一部分,当我在ViewModel类型中循环遍历
Photos
属性时,它会在那时获取那些记录? 有谁知道这里发生了什么?该网站运行完美,但NHProf只是看到它正在做一些不应该做的事情?!     
已邀请:
你还没有展示你的
Photos
集合是如何填充的,但我认为它就像
viewModel.Photos = entity.Photos
一样简单。如果这是正确的(或类似的东西),那么您只是将延迟加载的实体集合分配给视图模型。 有几种方法可以解决这个问题,但它们基本相同:在填充视图模型之前,需要触发加载集合。最简单的方法是将
.ToArray()
或等效物粘贴到您指定的集合上;这会强制取一个。     
你是对的。它与延迟加载有关。尝试热切地加载照片。并检查他们的关系。也许他们有一些急切的加载,你不需要,或者你试图在你的视图中使用相关的实体。     

要回复问题请先登录注册