NHProf genera 'esta sentencia ejecutada desde el punto de vista de' alerta al pasar un objeto ViewModel a mi página ASP.NET MVC Ver

StackOverflow https://stackoverflow.com/questions/4470425

Pregunta

Acabo de notar que en una página de mi sitio web, donde me paso un modelo de vista a mi página Ver, NHProf está dando la advertencia siguiente:

Esta sentencia ejecutada desde el punto de vista, lo que puede provocar mal funcionamiento y / o comportamiento frágil.

A continuación, se vincula a esta página: http://nhprof.com/Learn/Alerts/QueriesFromViews

Mi modelo de vista consiste en sólo 2 propiedades:

public IEnumerable<Photo> Photos { get; set; }
public Photo SelectedPhoto { get; set; }

Me asignar las fotos a este modelo de vista dentro de mi controlador de la siguiente manera:

PhotoViewModel myViewModel = new PhotoViewModel();
myViewModel.Photos = entity.Photos;

Mi vista, obviamente, hereda este tipo, y aparte de dar salida a una cabecera (que hace uso del objeto SelectedPhoto), sólo se coloca a través de cada uno de los Photos haciendo algo de contenido para cada uno de ellos.

NHProf muestra el 'problema' de la consulta como en el que recupera la colección de fotos que estoy en bucle a través de mi punto de vista, aunque no estoy diciendo explícitamente que se dispare y obtener los registros de dentro de mi vista - I han pasado los registros dentro de la propiedad Photos de mi modelo de vista.

Tengo otras páginas en el que no tienen que pasar un modelo de vista y yo simplemente pasan IEnumerable<Photo> a la vista, y luego hacer el marcado exactamente el mismo que hago en la vista de problemas y NHProf da ninguna advertencia (ya que hay no debería ser) en ese escenario.

Estoy pensando que tal vez se relaciona con Lazy Loading, y porque mi colección es parte de un modelo de vista, cuando voy a recorrer la propiedad Photos dentro del tipo de modelo de vista, se va a conseguir esos registros en ese momento?

¿Alguien tiene alguna idea de lo que está pasando aquí? El sitio funciona perfectamente, pero NHProf simplemente ve que está haciendo algo de donde no debería estar haciendo?!

¿Fue útil?

Solución

You haven't shown how your Photos collection is being populated, but I assume it's as simple as viewModel.Photos = entity.Photos. If that's correct (or something similar), then you're just assigning the lazy-loaded entity collection to your view model.

There are several ways to tackle this, but they're all essentially the same: you need to trigger the loading of your collection before you populate your view model. The easiest way to do it is to just stick a .ToArray() or equivalent onto the collection you're assigning; that'll force a fetch.

Otros consejos

You are right. It is related to Lazy loading. Try to load Photos eagerly. And check their relations. Maybe they have some with eager loading, you don't need, or you are trying to use associated entity in your view.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top