6

Este es el escenario, tengo un sitio web, que en una sola petición HTTP (HTTP POST), tengo que hacer lo siguiente:Entity Framework 4.1 - ¿Cómo "forzar" a EF a ir a DB en lugar de usar Graph?

  1. Coge un objeto (digamos "Tag")
  2. Guardar algunos otro objeto (digamos "Pregunta")
  3. Obtenga una copia nueva de "Etiqueta".
  4. Redirigir a otra página, que necesita una copia nueva de "Etiqueta".

Detrás de escena, 2) involucra desencadenadores del lado de la base de datos que afectan los datos en "Etiqueta".

Así que cuando hago 3), EF está tirando de la misma copia del objeto de la etapa 1), ya que está en la memoria de gráfico/interna (por ejemplo, misma conexión/contexto)

I necesitan un "fresco" copia del objeto.

En el pasado, he usado Detach, luego realizo una consulta de EF y el último objeto que se ha obtenido de la base de datos.

Pero no tengo acceso al objeto aquí per-se (tengo un DTO, que está volviendo de mi repositorio), así que no tengo nada que pasar al método Detach.

¿Hay alguna manera de decir:

var fresh = db.Tags.Find(1, ignoreGraph: true) 

O hay otra alternativa?

Como se ha mencionado, estoy en Entity Framework 4,1, C# 4 (y ASP.NET MVC 3)

La única solución que puedo ver ahora es pasar un parámetro de cadena de consulta a la página siguiente, que luego toma la copia nueva (ya que es un nuevo contexto, un nuevo gráfico, etc.).

+0

posible duplicado de http://stackoverflow.com/questions/7639219/reload-object-in-an-entity -framework-content-with-updated-values ​​/ 7639578 –

+0

@nathan - posiblemente, pero la respuesta no será de ayuda, ya que no tengo acceso al objeto 'umbrella' (o el objeto' tag' aquí) para la llamada 'context.Refresh (RefreshMode.StoreWins, umbrella)'. – RPM1984

+0

y también, eso es EF4, no EF4.1. Parece que el método "Refresh" se ha eliminado de DbContext. – RPM1984

Respuesta

13

encontrado mi respuesta, creo:

Context.Entry<T>(entity).Reload() 

Tratando ahora ...

+0

No tengo acceso a 'entidad', solo' dtoEntity'. – RPM1984

+1

Si desea actualizar la entidad, debe saber qué entidad actualizar, ¿no es así? Si conoce la clave de la entidad, puede encontrarla en el rastreador de cambios y luego volver a cargarla. –

+0

@Ladislav, tengo un índice único, no la entidad. Por ejemplo, hago 'Find(). SingleOrDefault (x => x.UniqueUri == someUri)'. – RPM1984

Cuestiones relacionadas